查询前一天 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))
在 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))