SQL Server中的DateDiff请求帮助
我正在使用SQLServer2008。我有一个表,它有一个datetime类型的列,名为CreateTime。我需要从该表中选择CreateTime距离当前时间(UTC时间)超过3天半小时的所有记录。我正在使用T-SQL存储过程 顺便说一句:CreateTime列是过去的某个时间 我花了相当长的时间学习并从MSDN中搜索DateDiff的帮助,但无法理解。谁能给我看一个样品吗 提前感谢,, 乔治您需要:SQL Server中的DateDiff请求帮助,sql,sql-server,tsql,sql-server-2008,stored-procedures,Sql,Sql Server,Tsql,Sql Server 2008,Stored Procedures,我正在使用SQLServer2008。我有一个表,它有一个datetime类型的列,名为CreateTime。我需要从该表中选择CreateTime距离当前时间(UTC时间)超过3天半小时的所有记录。我正在使用T-SQL存储过程 顺便说一句:CreateTime列是过去的某个时间 我花了相当长的时间学习并从MSDN中搜索DateDiff的帮助,但无法理解。谁能给我看一个样品吗 提前感谢,, 乔治您需要: WHERE-DATEADD(minute,4350,CreateTime)您可以使用minu
WHERE-DATEADD(minute,4350,CreateTime)您可以使用minutes选择并添加带有DATEDIFF的WHERE子句:
SELECT (fields)
FROM (table)
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())
选择(字段)
从(表)
哪里
CREATETIME问题实际上指定了3天半小时,而不是1天。谢谢Richard,在您的SQL语句中,第一个参数“.”的意思是?谢谢Richard,我在您的代码中发现了两个问题。:-)1.SQL Server 2008 Enterprise无法识别getdateutc,我需要使用GETUTCDATE;2.我想我应该使用WHERE DATEADD(分钟,4350,[CreationTime])>GETUTCDATE(),而不是WHERE DATEADD(分钟,4350,GETUTCDATE())>[CreationTime],因为过去的时间总是较小的?如果CREATETIME大于getdateutc(),则该值将为负值。它应该是-(3*24*60+30),所以这将是一个在将来某个时候创建的行,对吗?:-)听起来像是时间机器……大家好,对不起,我没有完全理解自己。Createtime已经成为过去。我想我应该使用下面的T-SQL,对吗?其中DATEADD(MINUTE,4350,[CreationTime])>GETUTCDATE()示例对于所述的问题是正确的。当第二个日期大于第一个日期时,DATEDIFF产生一个正数。
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
SELECT (fields)
FROM (table)
WHERE
CREATETIME <= DATEADD(MINUTE, - (3*24*60 + 30), getutcdate())