iT邦幫忙

0

MSSQL年度第幾周

  • 分享至 

  • xImage

您好:

因為 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)
看更多先前的討論...收起先前的討論...
mathewkl iT邦高手 1 級 ‧ 2022-05-24 08:56:31 檢舉
2022-1-1就2022年了,怎麼會歸去2021年呢,當然是算新年度的第一周
其實按照樓主的要求寫好,一年也只會有 52周,不會有53周,因為假如1/1號屬於前一年最後一周的話,今年也只會有 52周,這是把一周補滿七天的概念
ISO 8601 有規範,基本上我們周工作天應該是走美式標準
所以,周可以不滿七天,一年可以有53周,但是1/1 開始那天一定是一年的第一周,但印象中金融業跟很多業務公司的工作周不是這麼定義,反而是走歐規的要把周補滿七天,一年的第一周的第一天不一定是 1/1 號,而是第一個周一或是周日
淺水員 iT邦大師 6 級 ‧ 2022-05-24 15:41:52 檢舉
根據微軟這篇
https://docs.microsoft.com/zh-tw/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver16
如果用 iso_week 的話,是看週四在哪一週,感覺滿有趣的
應該就是一週中間的那天為準的意思吧?
noway iT邦研究生 1 級 ‧ 2022-05-25 23:24:01 檢舉
謝謝!我嘗試一下!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
淺水員
iT邦大師 6 級 ‧ 2022-05-24 00:06:02
最佳解答

第幾週怎麼定義本來就有很多種
目前是每年的 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 是禮拜五,不能算第一週

noway iT邦研究生 1 級 ‧ 2022-05-25 23:24:07 檢舉

謝謝!我嘗試一下!

我要發表回答

立即登入回答