【问题标题】:SQL single query to fetch next 12 dates for a given input dateSQL 单一查询以获取给定输入日期的下 12 个日期
【发布时间】:2020-03-18 04:58:14
【问题描述】:

我想要一个查询来获取给定日期的下 12 个日期(每月的第一天)。

例如,输入日期是 01/01/2019 (DD/MM/YYYY) 那么输出应该如下:

我尝试使用DATEADD 函数作为循环运行:

DECLARE @i INT
SET @i = 0
while(@i<12)
BEGIN
SELECT DATEADD(mm, @i, '01/01/2019');
SET @i = @i+1
END

这可行,但有没有一种方法可以通过单个查询获取所需的输出?

【问题讨论】:

  • 您使用的是哪个 Rdbms?
  • 声明希望显而易见,在应用程序语言中执行此操作将更好地使用适当的工具。
  • @Rams 因为mysql没有dateadd()函数,只有date_add(),问题中的代码是针对ms sql server的。删除了 mysql 标签。

标签: sql sql-server dateadd


【解决方案1】:

SQL Server 解决方案

with cte(DateVal) as(
SELECT CONVERT(datetime,'2019/01/01')  dt
union all
select  DATEADD(day,1,dateval) from cte where DateVal<DATEADD(day,11,'2019/01/01') )
SELECT * FROM CTE

【讨论】:

    【解决方案2】:

    对于 SQL Server 2017:

    ;with cte as (
      select cast('01/01/2019' as date) as DT, 1 as Id
      union all
      select dateadd(day, 1, DT) as DT, Id + 1 as Id
      from cte where Id < 12
    )
    select format(DT, 'MM/dd/yyyy') as DT from cte;
    

    http://sqlfiddle.com/#!18/9eecb/78996

    【讨论】:

      【解决方案3】:

      与 MariaDB 和他们的 Sequence Storage Engine

      SELECT STR_TO_DATE('01/01/2019','%d/%m/%Y') + seq DAY FROM seq_0_to_11
      

      参考:fiddle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-27
        相关资源
        最近更新 更多