如何在SQL Server 2012中根据日期字段获取“第2周”

时间:2017-10-12 18:24:03

标签: sql-server tsql date sql-server-2012

我的表格中有一个DueDate列,根据该日期,我希望根据星期一日期显示“Week of ...”列。

所以我想要这样的事情:

enter image description here

3 个答案:

答案 0 :(得分:2)

您可以将找到的答案here与" DatePart"功能如下:

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

答案 1 :(得分: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

如果星期日被认为与上一个星期一相同但下一个

,这可能会更简单

答案 2 :(得分:1)

我认为您可以使用DATEPART功能来获取一周中的数字日,然后构建一个案例陈述来说明星期一开始...就像这样(您可以替换你的我所拥有的日期' 10/1 2017'):

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的答案实际上是一样的; yay慢打字。