您好:
因為 MSDN論壇會被
The request is blocked.
0LZWLYgAAAACOJRBPr1PAQJ+lhDjA2duzVFBFMzFFREdFMDgxNAA0ZjkwZmU2OS02MjdhLTQwZTEtYjA3My1lNGVhZDVkOGU2NTg=
所以先在此請教:
您好:
如下 2021-12-31 是第53周
以星期日為每周 第一天來看,
星期六 2022-01-01,應該也要算 2021年第53周
但實際卻 是 第一周
而 2022-01-03 一,卻是第2周
這是否有點矛盾
還是有另外的解法?
謝謝!
declare @datetime varchar(50)
select @datetime = '2021-12-31' --53
SELECT datepart(week,@datetime)
--declare @datetime varchar(50)
select @datetime = '2022-01-01' -- 六 --1
SELECT datepart(week,@datetime)
select @datetime = '2022-01-02' -- 日 --1
SELECT datepart(week,@datetime)
select @datetime = '2022-01-03' -- 一 --2
SELECT datepart(week,@datetime)
第幾週怎麼定義本來就有很多種
目前是每年的 1/1 都定為第一週
如果要照你想要的東西修正
下面提供參考
DECLARE @datetime varchar(50);
DECLARE @firstdate varchar(50);
DECLARE @wkval int;
SELECT @datetime = '2022-01-02';
SET DATEFIRST 7;
-- 如果當年的 1/1 不是一週的第一天,就減 1
SELECT @firstdate = CONCAT(datepart(year, @datetime) , '-01-01');
IF datepart(weekday, @firstdate) <> 1
SELECT @wkval = datepart(week,@datetime) - 1
ELSE SELECT @wkval = datepart(week,@datetime);
-- 如果 @wkval 小於 1,必須取前一年最後一天的週數
IF @wkval < 1 BEGIN
SELECT @datetime = CONCAT(datepart(year, @datetime) - 1, '-12-31');
SELECT @firstdate = CONCAT(datepart(year, @datetime) , '-01-01');
IF datepart(weekday, @firstdate) <> 1
SELECT @wkval = datepart(week,@datetime) - 1
ELSE SELECT @wkval = datepart(week,@datetime);
END
SELECT @wkval
星期六 2022-01-01,應該也要算 2021年第53周
照你的算法,2022-01-01 應該是 2021年第52 週
因為 2021-01-01 是禮拜五,不能算第一週