查询前一天 month/year 变化时的数据

Query data from previous day when month/year changes

在 SQL 服务器查询中,我目前正在使用子句

WHERE
    DAY(trade_date) = DAY(GETDATE()) - 1 
    AND MONTH(trade_date) = MONTH(GETDATE()) 
    AND YEAR(trade_date) = YEAR(GETDATE())

查询我前一天的数据。

它现在工作正常,但我的问题是,例如,在 2021 年 8 月 1 日,SQL 服务器是否会尝试从 2021 年 8 月 0 日获取数据,或者它是否知道从 2021 年 7 月 31 日获取数据。

如果这个查询不起作用,我可以用什么代替?谢谢!

我建议使用正确的日期比较逻辑——而不是将其分解为日、月和年。此外,建议在日期值上使用适当的日期算术函数,如 DATEADD,而不仅仅是 - 1(永远不确定 -1 代表什么:减去一天?周?月?小时?) .

最后 - 我还建议使用 SYSDATETIME() 而不是 GETDATE() 因为后者总是 returns 一个 DATETIME 数据类型 - 它应该即将消失,并且您应该使用 DATE(如果您不需要时间部分)或 DATETIME2(n)(如果您确实需要时间部分),因为与 [=16 相比,它们效率更高且限制更少=].

如果您的 trade_date 是一个 DATE 列(它可能应该是),只需使用:

WHERE
    trade_date = DATEADD(DAY, -1, SYSDATETIME())

如果它不是 DATE - 只需根据需要将其转换为日期:

WHERE
    CAST(trade_date AS DATE) = DATEADD(DAY, -1, CAST(SYSDATETIME() AS DATE))