我正在使用SQL Server 2008.我有一个表,它有一个名为CreateTime的日期时间类型列。我需要从该表中选择所有记录的CreateTime超过3天,从当前时间(UTC时间)起半小时。我正在使用T-SQL存储过程。SQL Server中的DateDiff寻求帮助
顺便说一句:CreateTime列是过去一段时间。
我花了相当多的时间学习和搜索DateDiff的MSDN帮助,但无法弄清楚。任何人都可以给我看一个样品吗?
由于事先 乔治
我正在使用SQL Server 2008.我有一个表,它有一个名为CreateTime的日期时间类型列。我需要从该表中选择所有记录的CreateTime超过3天,从当前时间(UTC时间)起半小时。我正在使用T-SQL存储过程。SQL Server中的DateDiff寻求帮助
顺便说一句:CreateTime列是过去一段时间。
我花了相当多的时间学习和搜索DateDiff的MSDN帮助,但无法弄清楚。任何人都可以给我看一个样品吗?
由于事先 乔治
您可以选择和使用分钟,并DATEDIFF添加一个WHERE子句:
SELECT (fields)
FROM (table)
WHERE
DATEDIFF(MINUTE, CREATETIME, getutcdate()) <= (3*24*60 + 30)
当然,如果你只想要那些行更多超过3天,30分钟的路程,只需使用相反:
WHERE
DATEDIFF(MINUTE, CREATETIME, getutcdate()) > (3*24*60 + 30)
样品:
SELECT
DATEDIFF(MINUTE, '2009-08-01 08:00:00', getutcdate()),
DATEDIFF(MINUTE, '2009-07-31 20:00:00', getutcdate()),
DATEDIFF(MINUTE, '2009-07-23 20:00:00', getutcdate())
给出作为结果:
96 816 12337
所以前两个日期仍然在4350分钟的括号内(小于3天和30分钟前),而第三次日期更远。
马克
一个小问题给定答案,虽然他们是正确的。不要将函数应用于列:将函数应用于比较值。
如果CREATETIME被索引,那么它是扫描而不是使用列上的函数进行查找。 您不需要数百万行来解决这个问题。
适应marc_s的答案:
SELECT (fields)
FROM (table)
WHERE
CREATETIME <= DATEADD(MINUTE, - (3*24*60 + 30), getutcdate())
这个问题实际上是规定了3天,一个半小时,而不是1天。 – Amber 2009-08-01 09:19:37
被抓住了。更新。 – 2009-08-01 09:21:40