2017-10-12 34 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一样;你慢打字。

相关问题