答案 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慢打字。