【问题标题】:Between Dates Where Clause With Shifting Date日期转换条款之间的日期
【发布时间】:2013-12-18 16:15:35
【问题描述】:

是否可以在 SQL 中执行以下操作。我想编写一个代码,它将返回特定日期之间的记录,但会在报告运行时自动更新。比如:

12/18 我想返回 11-1 到 11/18 和 12/1 到 12/18 的记录,以便我可以在报告中逐月比较这些记录。

我知道我可以做到:

WHERE
[database] BETWEEN '2013-11-01' and DATEADD(Month, 1, getdate ())) 
and not [database] IN ('2013-11-19 and '2013-11-30')

但我必须每天都进入查询来更新 not between。我想这样做,以便我可以在任何一天运行查询并获取上个月的记录,直到本月的日期匹配。我目前一直在处理这个:

B.[datepaid] between DATEADD(Month, -1, getdate() ) 
and  DATEADD(MONTH, 1,  getdate() ))

但它会返回 11 月以来的所有记录。

【问题讨论】:

  • 它返回整个 11 月的结果是因为您在 where 子句中硬编码了 2013-11-01

标签: sql sql-server date between


【解决方案1】:

我会推荐against using BETWEEN with Dates,因为它可能会产生一些意想不到的结果。但在您的情况下,您可以使用:

WHERE ([Date] >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()) - 1, '19000101')
AND [Date] < DATEADD(MONTH, -1, GETDATE()))
OR ([Date] >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101')
AND [Date] < GETDATE());

Demo on SQL Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2023-03-14
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多