我有一个项目涉及将datetime
字段与当前日期和时间进行比较,如果它们之间的差异是10分钟,那么我必须选择一些日期。它涉及复杂性,例如当前日期和时间是大于字段datetime
的日期。有没有人有这个简单的解决方案?
答案 0 :(得分:0)
这可以使用DATEDIFF
非常简单地完成:
IF ( SELECT DATEDIFF(MINUTE, a.StartDate, GETDATE())
FROM TableA a) > 10
BEGIN
SELECT *
FROM TableB
END
这简单地说,如果当前时间(GETDATE()
)超过StartDate
上TableA
的10分钟,请执行其他操作。
请注意,如果a.StartDate
大于 GETDATE()
(无论出于何种原因),则DATEDIFF
的值将为否定 - 在这种情况下,您只需将比较更改为> -10
。
来自评论的编辑:
我想要所有在过去10分钟内都没有运行的serverID
这可以通过以下方式轻松完成:
SELECT ServerID
FROM TableA
WHERE DATEDIFF(MINUTE, LastRunTime, GETDATE()) > 10
以下是您可以查看DATEDIFF
行为的一些“检查” - 关于仅关注分钟的评论不正确,但跳到更大的间隔{{1} },DAY
等会导致一些有趣的行为。
例如:
MONTH
返回1(月),尽管相隔仅2天。类似地,
SELECT DATEDIFF(MONTH, '05/30/2016 08:10:00', '06/01/2016 08:05:00')
返回2,尽管时间不是相当使其达到2天标记。最后,
SELECT DATEDIFF(DAY, '05/30/2016 08:10:00', '06/01/2016 08:05:00')
也返回1.
希望这有助于您理解使用SELECT DATEDIFF(YEAR, '12/31/2016 08:10:00', '01/01/2017 08:05:00')
。