如果我有一个日期01/01/2009,我想知道它是哪一天,例如星期一,星期二,等等。
在SQL Server 2005/2008中有内置函数吗?或者我需要使用辅助桌吗?
如果我有一个日期01/01/2009,我想知道它是哪一天,例如星期一,星期二,等等。
在SQL Server 2005/2008中有内置函数吗?或者我需要使用辅助桌吗?
当前回答
在SQL Server 2012及以后的版本中,您可以使用FORMAT函数
SELECT FORMAT(GETDATE(), 'dddd')
其他回答
使用DATENAME或DATEPART:
SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6
欧洲:
declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);
您可能会发现这个版本用于在一行中返回缩短的工作日名称。
-- 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
这是一个工作副本的我的代码检查它,如何从日期检索日期名称在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')