我在试图弄清楚某些事情时遇到了一些困难,假设我有一个日期和时间;
我想添加 180 分钟;
SELECT DATEADD(MINUTE,180,'2018-05-24 15:00')
这会给我“2018-05-24 18:00”的答案,但我想在一个范围内做到这一点,所以如果你在 09:00 - 17:00 之间,请添加分钟,这样的事情;
SELECT DATEADD(MINUTES,180,'2018-05-24 15:00') WHERE '2018-05-24 15:00' BETWEEN '2018-05-24 09:00' AND '2018-05-24 17:00'
所以答案是“2018-05-25 10:00”
最佳答案
很难,但这应该适用于您的所有情况。该解决方案适用于任何(正)分钟数,结果将始终在参数化的小时内,并添加相应的天数。
DECLARE @RangeHourStart INT = 9
DECLARE @RangeHourEnd INT = 17
DECLARE @MinutesToAdd INT = 120
DECLARE @Date DATETIME = '2018-05-24 15:00'
SELECT
FinalDate = CASE
WHEN -- When final hour exceeds the range hour
DATEPART(HOUR, @Date) * 60 +
DATEPART(MINUTE, @Date) +
@MinutesToAdd % ((@RangeHourEnd - @RangeHourStart) * 60) > @RangeHourEnd * 60
THEN
DATEADD(HOUR, -1 * (@RangeHourStart - 1),
DATEADD(DAY, 1,
DATEADD(MINUTE, @MinutesToAdd % ((@RangeHourEnd - @RangeHourStart) * 60),
DATEADD(
DAY,
@MinutesToAdd / ((@RangeHourEnd - @RangeHourStart) * 60),
@Date))))
ELSE
DATEADD(MINUTE, @MinutesToAdd % ((@RangeHourEnd - @RangeHourStart) * 60),
DATEADD(
DAY,
@MinutesToAdd / ((@RangeHourEnd - @RangeHourStart) * 60),
@Date))
END
我这样做是为了让您无需硬编码任何值。
关于sql-server - DATEADD MINUTES 范围之间 MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50506262/