我有一个sql 2008数据库,我正在创建一个存储过程,用于检查日期时间是否超过3小时,但我不知道该怎么做。
你有办法吗?
日期时间是表格中的一个字段。
BR
答案 0 :(得分:2)
我建议使用列与表达式的比较(可以使用索引),而不是将DATEDIFF
应用于将取消索引的列值。
如果您想将此作为过滤器:
SELECT columns
FROM dbo.table
WHERE DateTimeColumn < DATEADD(HOUR, -3, CURRENT_TIMESTAMP);
(如果您只想要较新的行超过3小时,请将<
更改为>
或>=
。)
如果要返回包含显示是否超过3小时的列的所有行:
SELECT columns, [3HoursOld] = CASE
WHEN DateTimeColumn < DATEADD(HOUR, -3, CURRENT_TIMESTAMP)
THEN 'Yes, older than 3 hours.'
ELSE 'No, not older than 3 hours.'
END
FROM dbo.table;
答案 1 :(得分:1)
看一下DATEDIFF
函数。
DATEDIFF ( datepart , startdate , enddate )
然后,您将使用datepart设置为hh
并将enddate设置为当前时间。要获取当前数据库时间,可以使用GETDATE()
。将结果与3
进行比较,因为它将返回传递的小时数。
答案 2 :(得分:1)
@date是您要比较的日期
declare @date datetime
set @date= '2012-02-15 14:20:42.797'
SELECT DateDiff(hh, DATEADD(hh,-3,@date), GETDATE()) --if it's > 3
你最好创建一个布尔函数来完成你可以随意使用的技巧