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

戴维斯

在 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 获取数据。

如果此查询不起作用,我可以改用什么?谢谢!

marc_s

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

最后 - 我还建议使用SYSDATETIME()而不是GETDATE()因为后者总是返回一个DATETIME数据类型 - 这应该是它的出路,你应该使用DATE(如果你不需要时间部分),或者DATETIME2(n)(如果你确实需要时间部分),因为与DATETIME.

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章