如何在T-SQL中查询指定日期是当月的第几个星期一
T-SQL 计算指定周一为当月第几个星期一的实现方法
实现逻辑
前提:传入的输入日期已确定为星期一,我们可以直接通过日期数值计算得到结果,无需遍历当月所有日期,性能损耗极低:
- 固定周起始日为周一,避免不同环境
DATEFIRST配置差异导致计算错误 - 利用整数除法的取整特性,直接通过日期的日字段计算所在周次
- 可通过
CHOOSE函数直接生成英文序数描述
可直接运行的示例代码
-- 固定一周第一天为星期一,避免环境配置影响计算结果 SET DATEFIRST 1; -- 声明待查询的目标周一日期,可按需修改 DECLARE @TargetMonday DATE = '2023-04-10'; -- 校验输入是否为星期一,不需要校验可删除此段 IF DATEPART(WEEKDAY, @TargetMonday) != 1 BEGIN RAISERROR('输入日期不是星期一,请修正参数后重试', 16, 1); RETURN; END -- 计算是当月第几个星期一 DECLARE @MondayOrder INT = (DATEPART(DAY, @TargetMonday) - 1) / 7 + 1; -- 查询输出结果 SELECT @TargetMonday AS 目标日期, @MondayOrder AS 第几个星期一, CHOOSE(@MondayOrder, 'first', 'second', 'third', 'fourth', 'fifth') AS 英文序数描述
示例输出
| 目标日期 | 第几个星期一 | 英文序数描述 |
|---|---|---|
| 2023-04-10 | 2 | second |
内容的提问来源于stack exchange,提问作者Rashedul Alam
相关产品推荐
相关产品推荐

