当月/年变化时查询前一天的数据

问题描述

sql Server 查询中,我目前正在使用子句

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