sql - SQL 将日期转换为工作日名称
问题描述
我在 SQL Server 中工作,我有一个这样的表;
我想要达到的目标;我正在整理一份最常请病假的清单。我需要将 [病假开始日期] 列转换为一周中的某一天。我使用DATENAME(day, GETDATE())
.
这适用于获取用户第一次生病的星期几 - 但是在 [Total Days Off] 大于 1 的情况下,我需要遍历每个日期并存储日期名称。
因此,我希望实现以下目标;
任何指针将不胜感激!
解决方案
首先生成您的生病日期范围,然后加入一个日历表(我在这里递归生成一个)并按每天的名称分组。
;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 上替换您的表和列以运行。
推荐阅读
- python - 如何在python,opencv中的构造函数内部读取相机帧
- linux - 脚本完全执行后如何打印成功消息?
- c# - 来自客户端的 WCF 令牌身份验证调用,无需编辑现有服务客户端调用
- metal - 金属着色器语言中是否有任何容器作为 std::vector ?
- android - 如何使用jetpack compose将焦点状态设置为Button?
- shap - 如何获取 GPyTorch 回归器的 SHAP 值?
- dashboard - 使用 watson studio 云创建仪表板失败
- javascript - 如何用 JavaScript 确定某个元素声明了某个空属性?
- wpf - wpf datagrid mvvm 绑定
- teradata - Teradata 中最伟大的功能是使用两个以上的参数引发错误