2013-09-23 61 views
-2

我是T-SQL的新手,需要緊急幫助。 我想從給定的日期獲取週數。根據日期返回週數

據我所知,有一個在它的函數構建,但價值回報不完全是我想要的。

對於例如,通過選擇datepart(wk, '2013-01-07'),它將返回我的「2」。但實際的事實是,它應該返回「1」,而不是「2」。

任何想法如何解決此問題?

+0

減去1?..... –

+1

*當datepart是星期(wk,ww)或星期幾(dw)時,返回值取決於使用SET DATEFIRST設置的值* –

+0

select datediff(dd, '2013-01-01','2013-01-07')/ 7 –

回答

1

您可以使用dy日期部分符來獲得DAYOFYEAR號和7分着喝

select (datepart(dy, '2013-01-05') - 1)/7 + 1; 

工作DEMO

+0

+1是的,我想建議與1月1日,但這一個更好,我認爲 –

+0

謝謝馬辛!你是我的救世主! –

0

試試這個

SELECT DATEPART(WEEK,GETDATE())

0

這取決於你跳定義第一周。它總是在同一個工作日開始嗎?或者它是否始終在一月一號開始?如果您希望它始終在同一個工作日內啓動,那麼請使用Set datefirst來告訴T-SQL您想要定義爲星期幾的星期幾。如果你想讓它總是在1月1日開始,然後只用一年,而不是一週中的一天,7減1,整數除法,並添加1

declare @dat DateTime = getdate() 
Select Select (datepart(dy, @dat)-1)/7 + 1 
0

雖然從內存中去,相信對於ISO標準一年的第一週是一年中第一個星期四的一週。這可能解釋了爲什麼內置函數給出的結果與您所需的結果不同。