【问题标题】:Find the first day of last month in every quarter in a database?在数据库中查找每个季度上个月的第一天?
【发布时间】:2023-03-18 02:43:01
【问题描述】:

我每天都有类似“2020-01-01”格式的数据。如何在数据库中准确定位每个季度上个月的第一天?

这是目前为止的:

Where
   d3.[day_date] > DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0))
    and d3.[day_date] < DATEADD(qq, DATEDIFF(qq, 0, GETDATE()) + 1, 0) 

非常感谢您的时间和帮助。

【问题讨论】:

  • 那么您是否将日期存储为 varchars?并且是否正在处理您当前的查询?样本数据 + 预期结果会让事情变得更清晰。
  • 请不要在问题标题中添加标签名称。该网站会自动处理。

标签: sql sql-server date datediff dateadd


【解决方案1】:

你可以使用datefromparts():

select datefromparts(year(day_date),
                     ceiling(month(day_date) / 3.0) * 3,
                     1)

如果您希望表格中的每个日期都使用此功能,您可以使用:

select distinct datefromparts(year(day_date),
                              ceiling(month(day_date) / 3.0) * 3,
                              1) as yyyyqq
from t;

【讨论】:

    【解决方案2】:

    您可以稍微修改您的查询以获得季度最后一个月的第一天,如下所示:

    SELECT DATEADD(mm,-1,DATEADD(qq, DATEDIFF(qq, 0, GETDATE()) -1, 0)) -- two quarters before last month
    SELECT DATEADD(mm,-1,DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0  )) --  previous quarter last month
    SELECT DATEADD(mm,-1,DATEADD(qq, DATEDIFF(qq, 0, GETDATE()) + 1, 0)) -- current quarter last month
    SELECT DATEADD(mm,-1,DATEADD(qq, DATEDIFF(qq, 0, GETDATE()) + 2, 0)) -- next quarter last month 
    
    2021-03-01 00:00:00.000
    2021-06-01 00:00:00.000
    2021-09-01 00:00:00.000
    2021-12-01 00:00:00.000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多