2017-10-12 36 views
1

我在表中有一個DueDate列,並基於該日期,我想基於星期一日期顯示「Week of ...」值。如何根據SQL Server 2012中的日期字段獲取「第2周」

所以我想是這樣的:

enter image description here

+1

你不想顯示完整的日期嗎?當一週的開始是不同的月份時,你想要發生什麼?例如11月1日? –

+1

使用合適的軟件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服務器2014'。語法和特徵的差異常常影響答案,例如'DateFromParts()'。請注意,'tsql'縮小了選擇範圍,但不指定數據庫。 – HABO

+0

可能重複的[從日期獲取週數](https://stackoverflow.com/questions/42794544/get-week-number-in-year-from-date) – Igor

回答

2

您可以將答案發現here與 「日期部分」 功能,像這樣:

SELECT 
     'Week Of ' + CONVERT(VARCHAR(2), DATEPART(DAY,DATEADD(DAY, (2-DATEPART(WEEKDAY, GETDATE())), GETDATE()))) + CASE 
                     WHEN DATEPART(DAY, GETDATE()) % 100 IN (11,12,13) THEN 'th' --first checks for exception 
                     WHEN DATEPART(DAY, GETDATE()) % 10 = 1 THEN 'st' 
                     WHEN DATEPART(DAY, GETDATE()) % 10 = 2 THEN 'nd'                            
                     WHEN DATEPART(DAY, GETDATE()) % 10 = 3 THEN 'rd'                            
                     ELSE 'th' --works for num % 10 IN (4,5,6,7,8,9,0)                           
                    END 
+0

謝謝,但''周.. 「需要以星期一爲基礎。就像在一個例子 – Oleg

+0

@ Oleg我編輯了我的答案,以更好地匹配您的問題 – TheMountainPass

+0

太棒了!非常感謝你! – Oleg

1

試試這個:

select date, 
('week of ' + 
convert(varchar(2), datepart(day, DATEADD(day, -(case when datepart(weekday, date)=1 then 8 else datepart(weekday, date) end)+2, date)))) 
as monday 
from table1; 

參見Fiddle

這可能是簡單的,如果星期天不考慮相同的最後一個星期一,但接下來的

1

我想你可以使用DATEPART函數來獲取一週的數字一天,然後建立case語句對佔週一開始......像這樣(在那裏你會替換你的約會,我有'10 /二千〇一十七分之一' ):

select 'Week of ' + CONVERT(VARCHAR(10),DATEADD(dd, -DATEPART(dw,'10/1/2017') 
    + CASE WHEN DATEPART(dw,'10/1/2017') = 1 THEN -5 ELSE 2 END, '10/1/2017'),101) 

編輯:剛剛意識到我的答案是有效的和Psidom一樣;你慢打字。

相關問題