我现在仅在查询上工作,而不在TSQL上工作。所以我想通过查询获取结果。
我想显示每个月的第一个星期一。我想出一个查询来查找CTE中一年中每个月的日期。 (所以我的CTE给出了12个日期)。
现在,我想检查每个日期并获取最近的星期一。那是我那个月的第一个星期一。
我无法遍历查询中的每个日期。
如何处理此结果集?
谢谢
with
Wk_num
as
(select 1 as n
union all
select n=n+1
from wk_num
where n <12)
select dateadd(month,n,getdate()) from wk_num
答案 0 :(得分:0)
以下是实际获取每月第一天和每月第一天的代码(这不使用任何复杂的函数,而只是简单的日期函数):
with Wk_num as
(select 1 as n
union all
select n=n+1 from wk_num where n <12)
select dateadd(month,n,datefromparts(year(getdate()),month(getdate()),1)) as FirstDay,
dateadd(day,iif(9-datepart(dw,dateadd(month,n,datefromparts(year(getdate()),month(getdate()),1)))>7,2-datepart(dw,dateadd(month,n,datefromparts(year(getdate()),month(getdate()),1))),9-datepart(dw,dateadd(month,n,datefromparts(year(getdate()),month(getdate()),1)))),dateadd(month,n,datefromparts(year(getdate()),month(getdate()),1))) as FirstMonday
from wk_num
答案 1 :(得分:0)
使用模运算的相对简单的方法:
with cte as (
select convert(date, '2019-01-01') as dte
union all
select dateadd(month, 1, dte)
from cte
where dateadd(month, 1, dte) < '2020-01-01'
)
select dte,
dateadd(day, (9 - datepart(weekday, dte)) % 7, dte) as first_monday
from cte;
这假设工作日数字以星期日的1
开头。