我目前正在编写一些SQL,并且遇到了一个奇怪的问题。
我正在使用的代码是:
select * from #table1
where datefield = DATEADD(day, -2, getdate())
我遇到的问题是它不会提取任何类似的信息。如果我添加'>'到'='它会提取信息。如果我将确切的日期放入查询而不是'dateadd'文件中,它会提取正确的记录。
我已经测试了日期参数,并且有4/10/2011的匹配记录。但由于某些原因,它只是不喜欢这个例子中的'= dateadd'。
我也试图使用'current_timestamp'字符串而不是'getdate'以及相同的结果。
有什么建议吗?
答案 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)