比较存储过程中的日期时间

时间:2012-02-15 14:17:49

标签: sql-server-2008 datetime stored-procedures

我有一个sql 2008数据库,我正在创建一个存储过程,用于检查日期时间是否超过3小时,但我不知道该怎么做。

你有办法吗?

日期时间是表格中的一个字段。

BR

3 个答案:

答案 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

你最好创建一个布尔函数来完成你可以随意使用的技巧