范围MSSQL之间的DATEADD MINUTES

基尔

我在尝试找出某些东西时遇到了一些困难,可以说我有一个日期和时间。

我想增加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

我做到了,所以您不需要硬编码任何值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章