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

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


当前回答

欧洲:

declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);

其他回答

欧洲:

declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);

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

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

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

这是一个工作副本的我的代码检查它,如何从日期检索日期名称在SQL

CREATE Procedure [dbo].[proc_GetProjectDeploymentTimeSheetData] 
@FromDate date,
@ToDate date

As 
Begin
select p.ProjectName + ' ( ' + st.Time +' '+'-'+' '+et.Time +' )' as ProjectDeatils,
datename(dw,pts.StartDate) as 'Day'
from 
ProjectTimeSheet pts 
join Projects p on pts.ProjectID=p.ID 
join Timing st on pts.StartTimingId=st.Id
join Timing et on pts.EndTimingId=et.Id
where pts.StartDate >= @FromDate
and pts.StartDate <= @ToDate
END

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

SELECT FORMAT(GETDATE(), 'dddd')

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

SELECT DATENAME(WEEKDAY,GETDATE()) AS WeekDay

or

SELECT DATENAME(W,GETDATE()) AS WeekDay