【问题标题】:SELECT previous year up to current date选择上一年到当前日期
【发布时间】:2019-07-15 22:09:12
【问题描述】:

例如,我有一个包含开始日期列的表:

Start Date
2015/01/05
2015/02/08
2016/01/10
2017/02/10
etc...

我正在尝试在我的WHERE 子句中添加基于当前GETDATE() 的一年前的所有记录。

例如,如果今天是 2019 年 7 月并且我运行查询,我希望它运行并给我从 2018 年 7 月到 2019 年 6 月的开始日期。如果我在 2019 年 8 月运行它,我希望它显示从 2018 年 8 月到 2019 年 7 月的开始日期,依此类推。基本上直到当前日期的前一个月。

目前我的 WHERE 子句中有这个:

WHERE start_date between DATEADD(YEAR,-1, GETDATE()) and GETDATE()

但我相信这似乎只提前一年,直到当前日期准确。

我有更好的方法吗?

【问题讨论】:

  • 你做的没问题。仔细检查你的输出。
  • 如果我想把它放到 GETDATE() 前一个月的位置,我是否需要将第二个 GETDATE() 调整为 DATEADD(MONTH, -1, GETDATE( )) ?
  • 你做的没问题。另一件事是,如果您想涵盖从 2018 年 1 月 1 日到 2019 年 7 月 1 日的 7 月。如果不是这样,则您的查询是正确的。
  • 这是一个将正确的功能组合在一起的问题。像这些例子:zarez.net/?p=2462

标签: sql sql-server date getdate


【解决方案1】:

我认为这是您的要求:

WHERE start_date BETWEEN
  DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 1) 
  AND
  DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)

与:

DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 1)

你得到去年当月的第一天。
与:

DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)

你会得到上个月的最后一天。
请参阅demo

【讨论】:

    【解决方案2】:

    您可以在 SQL Server 中使用datefromparts()

    where start_date >= datefromparts(year(getdate()) - 1, 1, 1) and
          start_date < datefromparts(year(getdate() - 1, month(getdate()), day(getdate())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2022-01-17
      • 2014-01-06
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      相关资源
      最近更新 更多