gpt4 book ai didi

sql - 基于日期获取所有日期 - sql

转载 作者:行者123 更新时间:2023-12-02 06:49:02 24 4
gpt4 key购买 nike

我有开始日期、结束日期和日期名称。如何在 sql 中获取特定日期的这两个日期之间的所有日期?

示例数据:

  • 开始日期:2018 年 4 月 11 日
  • 结束日期:2018 年 5 月 11 日
  • 天数:周一、周四

预期输出:开始日期和结束日期之间的所有日期,即星期一和星期四,并将它们存储在表中

已更新我现在的代码(不工作)

; WITH CTE(dt)
AS
(
SELECT @P_FROM_DATE
UNION ALL
SELECT DATEADD(dw, 1, dt) FROM CTE
WHERE dt < @P_TO_DATE
)
INSERT INTO Table_name
(
ID
,DATE_TIME
,STATUS
,CREATED_DATE
,CREATED_BY
)
SELECT @P_ID
,(SELECT dt FROM CTE WHERE DATENAME(dw, dt) In ('tuesday','friday',null))
,'NOT SENT'
,CAST(GETDATE() AS DATE)
,@USER_ID

最佳答案

另一种生成范围之间日期的方法可以像下面的查询一样。与 CTEWHILE 循环相比,这会更快。

DECLARE @StartDate DATETIME = '2018-04-11'
DECLARE @EndDate DATETIME = '2018-05-15'

SELECT @StartDate + RN AS DATE FROM
(
SELECT (ROW_NUMBER() OVER (ORDER BY (SELECT NULL)))-1 RN
FROM master..[spt_values] T1
) T
WHERE RN <= DATEDIFF(DAY,@StartDate,@EndDate)
AND DATENAME(dw,@StartDate + RN) IN('Monday','Thursday')

注意:

如果 master..[spt_values] 中的行数不足以满足提供的范围,您可以使用相同的交叉连接来获得更大的范围,如下所示。

SELECT (ROW_NUMBER() OVER (ORDER BY (SELECT NULL)))-1 RN 
FROM master..[spt_values] T1
CROSS JOIN master..[spt_values] T2

通过这种方式,您将能够生成间隔为 6436369 天的范围内的日期。

关于sql - 基于日期获取所有日期 - sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49773619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com