gpt4 book ai didi

SQL 将日期转换为工作日名称

转载 作者:行者123 更新时间:2023-12-04 22:29:37 24 4
gpt4 key购买 nike

我在 SQL Server 中工作,我有一个这样的表;

My Table

我想要达到的目标;我正在整理一份最常请病假的 list 。我需要将 [病假开始日期] 列转换为一周中的某一天。使用 DATENAME(day, GETDATE()) 实现这一点我没有问题。

这适用于获取用户第一次生病的星期几 - 但是 [Total Days Off] 大于 1 时,我需要遍历每个日期并存储日期名称。

所以我希望实现以下目标;

desired results

任何指针将不胜感激!

最佳答案

首先生成您的生病日期范围,然后加入一个日历表(我在这里递归生成一个)并按每天的名称分组。

;WITH RecursiveCalendar AS
(
SELECT
GeneratedDate = CONVERT(DATE, '2018-01-01')

UNION ALL

SELECT
GeneratedDate = DATEADD(DAY, 1, C.GeneratedDate)
FROM
RecursiveCalendar AS C
WHERE
C.GeneratedDate < '2019-01-01'
),
SickRanges AS
(
SELECT
S.StartDate,
EndDate = DATEADD(DAY, CEILING(S.DaysOff) - 1, S.StartDate)
FROM
YourTable AS S
)
SELECT
Weekday = DATENAME(WEEKDAY, C.GeneratedDate),
AmountSickDays = COUNT(1)
FROM
SickRanges AS R
INNER JOIN RecursiveCalendar AS C ON C.GeneratedDate BETWEEN R.StartDate AND R.EndDate
GROUP BY
DATENAME(WEEKDAY, C.GeneratedDate)
ORDER BY
COUNT(1) DESC
OPTION
(MAXRECURSION 30000)

在第二个 CTE 上替换您的表和列以运行。

关于SQL 将日期转换为工作日名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50353827/

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