如果我有一个日期01/01/2009,我想知道它是哪一天,例如星期一,星期二,等等。
在SQL Server 2005/2008中有内置函数吗?或者我需要使用辅助桌吗?
如果我有一个日期01/01/2009,我想知道它是哪一天,例如星期一,星期二,等等。
在SQL Server 2005/2008中有内置函数吗?或者我需要使用辅助桌吗?
当前回答
使用DATENAME或DATEPART:
SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6
其他回答
在SQL Server 2012及以后的版本中,您可以使用FORMAT函数
SELECT FORMAT(GETDATE(), 'dddd')
使用DATENAME或DATEPART:
SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6
如果您不想依赖于@@DATEFIRST或使用DATEPART(weekday, DateColumn),只需自己计算星期几即可。
对于以周一为基准的周(欧洲),最简单的方法是:
SELECT DATEDIFF(day, '17530101', DateColumn) % 7 + 1 AS MondayBasedDay
对于星期日为基础的周(美国)使用:
SELECT DATEDIFF(day, '17530107', DateColumn) % 7 + 1 AS SundayBasedDay
这返回了自1753年1月1日以来的工作日数字(1到7)。
SELECT CASE DATEPART(WEEKDAY,GETDATE())
WHEN 1 THEN 'SUNDAY'
WHEN 2 THEN 'MONDAY'
WHEN 3 THEN 'TUESDAY'
WHEN 4 THEN 'WEDNESDAY'
WHEN 5 THEN 'THURSDAY'
WHEN 6 THEN 'FRIDAY'
WHEN 7 THEN 'SATURDAY'
END
您可能会发现这个版本用于在一行中返回缩短的工作日名称。
-- Test DATA
select @@datefirst
create table #test (datum datetime)
insert #test values ('2013-01-01')
insert #test values ('2013-01-02')
insert #test values ('2013-01-03')
insert #test values ('2013-01-04')
insert #test values ('2013-01-05')
insert #test values ('2013-01-06')
insert #test values ('2013-01-07')
insert #test values ('2013-01-08')
-- Test DATA
select Substring('Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun,Mon,Tue,Wed,Thu,Fri,Sat',
(DATEPART(WEEKDAY,datum)+@@datefirst-1)*4+1,3),Datum
from #test