在SQL Server中将数字转换为DaysOfWeek星期名称的方法
在SQL Server中解析Windows任务计划的星期标志位数值为星期名称
你的需求是将对应Windows任务计划WeeklyTrigger.DaysOfWeek属性的整数值(位标志格式),转换为对应的星期名称列表。以下是具体实现方案:
核心实现逻辑
每个星期对应一个2的幂次整数(位标志),通过位运算判断目标数值是否包含该星期的标志位,再将匹配到的星期名称拼接成逗号分隔的字符串。
完整示例代码
-- 定义星期枚举映射表 DECLARE @DaysOfWeek TABLE ( DayEnum INT NOT NULL, DayName NVARCHAR(10) NOT NULL ) INSERT INTO @DaysOfWeek VALUES (1, '周日'), (2, '周一'), (4, '周二'), (8, '周三'), (16, '周四'), (32, '周五'), (64, '周六') -- 传入需要解析的目标数值(示例为28) DECLARE @TargetValue INT = 28 -- SQL Server 2017+ 版本:用STRING_AGG直接拼接 SELECT STRING_AGG(DayName, ', ') AS 对应星期 FROM @DaysOfWeek WHERE (@TargetValue & DayEnum) = DayEnum
兼容低版本SQL Server(2016及以下)
如果你的SQL Server版本不支持STRING_AGG,可以用STUFF + FOR XML PATH的方式实现拼接:
SELECT STUFF(( SELECT ', ' + DayName FROM @DaysOfWeek WHERE (@TargetValue & DayEnum) = DayEnum FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS 对应星期
示例结果
当@TargetValue = 28时,返回结果为:
周二, 周三, 周四
(因为28 = 4 + 8 + 16,对应周二、周三、周四的标志位均被设置)
内容的提问来源于stack exchange,提问作者sleven
相关产品推荐
相关产品推荐

