问题描述
WHERE
DAY(Trade_date) = DAY(GETDATE()) - 1
AND MONTH(Trade_date) = MONTH(GETDATE())
AND YEAR(Trade_date) = YEAR(GETDATE())
查询我前一天的数据。
它现在工作正常,但我的问题是,例如,在 8/1/2021,sql Server 是否会尝试从 8/0/2021 获取数据,或者它是否知道从 7/31 获取数据/2021.
如果这个查询不起作用,我可以用什么代替?谢谢!
解决方法
我建议使用适当的日期比较逻辑 - 而不是将其分解为日、月和年。此外,建议在日期值上使用适当的日期算术函数,如 DATEADD
而不是 - 1
(永远不确定 -1 代表什么:减去一天?周?月?小时?) .
最后 - 我还建议使用 SYSDATETIME()
而不是 GETDATE()
因为后者总是返回一个 DATETIME
数据类型 - 这应该是它的出路,你应该使用 {{ 1}}(如果您不需要时间部分)或 DATE
(如果您确实需要时间部分),因为与 DATETIME2(n)
相比,它们效率更高且限制更少。
如果您的 DATETIME
是一个 trade_date
列(它可能应该是),只需使用:
DATE
如果它不是 WHERE
trade_date = DATEADD(DAY,-1,SYSDATETIME())
- 只需根据需要将其转换为日期:
DATE