如果您有日曆表,這很容易。日曆表是包含給定範圍的每個日期及其部分的表格。我創建礦爲2010年至2020年,此代碼:
declare @start_dt as date = '1/1/2010';
declare @end_dt as date = '1/1/2020';
declare @dates as table (
date_id date primary key,
date_year smallint,
date_month tinyint,
date_day tinyint,
weekday_id tinyint,
weekday_nm varchar(10),
month_nm varchar(10),
day_of_year smallint,
quarter_id tinyint,
first_day_of_month date,
last_day_of_month date,
start_dts datetime,
end_dts datetime
)
while @start_dt < @end_dt
begin
insert into @dates(
date_id, date_year, date_month, date_day,
weekday_id, weekday_nm, month_nm, day_of_year, quarter_id,
first_day_of_month, last_day_of_month,
start_dts, end_dts
)
values(
@start_dt, year(@start_dt), month(@start_dt), day(@start_dt),
datepart(weekday, @start_dt), datename(weekday, @start_dt), datename(month, @start_dt), datepart(dayofyear, @start_dt), datepart(quarter, @start_dt),
dateadd(day,-(day(@start_dt)-1),@start_dt), dateadd(day,-(day(dateadd(month,1,@start_dt))),dateadd(month,1,@start_dt)),
cast(@start_dt as datetime), dateadd(second,-1,cast(dateadd(day, 1, @start_dt) as datetime))
)
set @start_dt = dateadd(day, 1, @start_dt)
end
select *
into Calendar
from @dates
一旦你有,你可以在PromisedWeek
declare @PromisedYear as numeric
declare @PromisedWeek as int
set @PromisedYear = 2017
set @PromisedWeek = 4
select concat(date_day, '-', weekday_nm, '-', @PromisedYear)
from Calendar as c
where
weekday_id =
(select weekday_ID
from Calendar
where date_year = @PromisedYear
and day_of_year = 1
)
and datepart(week, date_id) = @PromisedWeek
and date_year = @PromisedYear
查詢正確的工作日日曆表原來,2017年1月1日是一個星期天並在2017年第4個星期日爲1月22日,這樣的回報是22-Sunday-2017
可以共享表的結構和一些樣本數據,以及作爲供試品數據所需的輸出?目前尚不清楚你在這裏做什麼。 –