关于DateAdd功能和信息的问题

时间:2011-04-12 15:33:25

标签: sql tsql

我目前正在编写一些SQL,并且遇到了一个奇怪的问题。

我正在使用的代码是:

select * from #table1
where datefield = DATEADD(day, -2, getdate())

我遇到的问题是它不会提取任何类似的信息。如果我添加'>'到'='它会提取信息。如果我将确切的日期放入查询而不是'dateadd'文件中,它会提取正确的记录。

我已经测试了日期参数,并且有4/10/2011的匹配记录。但由于某些原因,它只是不喜欢这个例子中的'= dateadd'。

我也试图使用'current_timestamp'字符串而不是'getdate'以及相同的结果。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

DATEADD(day, -2, getdate())也会返回时间组件,例如2011-04-10 16:35:23.437

如果您的Sql Server版本低于2008(当添加DATE类型时),您可以使用DATEADD(dd, 0, DATEDIFF(dd, 0, DATEADD(day, -2, getdate())))来获取日期部分

答案 1 :(得分:2)

getdate()精确1/300秒。您正在查询最近(几乎)毫秒的确切时间。

如果您的日期字段是DATETIME但没有实际时间部分,请使用以下命令:

SELECT  *
FROM    #table1
WHERE   datefield = DATEADD(day, -2, CAST(getdate() AS DATE))

或者更好,这个:

SELECT  *
FROM    #table1
WHERE   datefield >= DATEADD(day, -2, CAST(getdate() AS DATE))
        AND datefield < DATEADD(day, -1, CAST(getdate() AS DATE))

后一个查询将返回日期的所有记录(即使设置了时间部分)。

答案 2 :(得分:1)

Getdate()返回Datetime,其中包含时间部分。我猜你只是在约会日期。尝试:

where datefield = CAST(DATEADD(day, -2, getdate())) as DATE)