如果我有一个日期01/01/2009,我想知道它是哪一天,例如星期一,星期二,等等。

在SQL Server 2005/2008中有内置函数吗?或者我需要使用辅助桌吗?


当前回答

另外,以上所有答案中,dw代表Week Day

SELECT DATENAME(WEEKDAY,GETDATE()) AS WeekDay

or

SELECT DATENAME(W,GETDATE()) AS WeekDay

其他回答

使用DATENAME或DATEPART:

SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6

在SQL Server 2012及以后的版本中,您可以使用FORMAT函数

SELECT FORMAT(GETDATE(), 'dddd')

另外,以上所有答案中,dw代表Week Day

SELECT DATENAME(WEEKDAY,GETDATE()) AS WeekDay

or

SELECT DATENAME(W,GETDATE()) AS WeekDay

如果您不想依赖于@@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)。

要获得给定日期的星期几的确定值,可以使用DATEPART()和@@datefirst的组合。否则你将依赖于服务器上的设置。

请访问以下网站寻找更好的解决方案: MS SQL:星期的一天

然后,星期几将在0到6的范围内,其中0是星期天,1是星期一,等等。然后可以使用简单的case语句返回正确的工作日名称。