如何根据SQL Server 2012中的日期字段获取“第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
谢谢,但''周.. “需要以星期一为基础。就像在一个例子 – Oleg
@ Oleg我编辑了我的答案,以更好地匹配您的问题 – TheMountainPass
太棒了!非常感谢你! – Oleg
试试这个:
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。
这可能是简单的,如果星期天不考虑相同的最后一个星期一,但接下来的
我想你可以使用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一样;你慢打字。
你不想显示完整的日期吗?当一周的开始是不同的月份时,你想要发生什么?例如11月1日? –
使用合适的软件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服务器2014'。语法和特征的差异常常影响答案,例如'DateFromParts()'。请注意,'tsql'缩小了选择范围,但不指定数据库。 – HABO
可能重复的[从日期获取周数](https://stackoverflow.com/questions/42794544/get-week-number-in-year-from-date) – Igor