最后一刻

时间:2019-02-25 12:25:37

标签: sql sql-server datetime

我发现了以下

Select dateadd(minute, datediff(minute,0,GETDATE()) / 15 * 15, 0)

非常适合四舍五入到小时的最后四分之一。但是我总是希望得到最后一小时的最后一刻。

例如

如果时间是上午12:35,我想看上午11:45,因为那是该小时的最后一刻。

4 个答案:

答案 0 :(得分:2)

您可以使用datetimefromparts()

select datetimefromparts(year(dt), month(dt), day(dt), datepart(hour, dt), 45, 0, 0)
from (values (dateadd(hour, -1, getdate()))) v(dt);

答案 1 :(得分:0)

这有点漫长,就像我的思维方式一样(戈登的思想比我的简洁得多):

DECLARE @time time = '12:35'

SELECT CONVERT(time,DATEADD(MINUTE,45,DATEADD(HOUR, DATEDIFF(HOUR,'00:00',DATEADD(MINUTE, -45, @time)),'00:00')));

答案 2 :(得分:0)

假设我理解了这个问题,您想获取当前分钟的当前小时在45到59之间,或者如果当前分钟在0到44之间,则要获取前一个小时-所以这是我建议的解决方案:

DECLARE @ActualTime DateTime = GetDate()

SELECT @ActualTime As ActualTime, DATETIMEFROMPARTS(YEAR(Now), MONTH(Now), DAY(Now), DATEPART(HOUR, Now), 45, 0, 0) As LastQuarterOfHour
FROM 
(
    SELECT IIF(DATEPART(MINUTE,@ActualTime) < 45, DATEADD(HOUR, -1, @ActualTime), @ActualTime) As Now
) AS x

答案 3 :(得分:0)

使用CASE表达式扩展代码:

SELECT testdate
     , DATEADD(MINUTE, DATEDIFF(HOUR, 0, testdate) * 60 - CASE WHEN DATEPART(MINUTE, testdate) < 45 THEN 15 ELSE 0 END, 0) AS clamped
FROM (VALUES
    ('2019-02-25 01:44:59'),
    ('2019-02-25 01:45:00')
) v(testdate)

-- testdate            | clamped
-- 2019-02-25 01:44:59 | 2019-02-25 00:45:00.000
-- 2019-02-25 01:45:00 | 2019-02-25 01:00:00.000