如果我有一个日期01/01/2009,我想知道它是哪一天,例如星期一,星期二,等等。
在SQL Server 2005/2008中有内置函数吗?或者我需要使用辅助桌吗?
如果我有一个日期01/01/2009,我想知道它是哪一天,例如星期一,星期二,等等。
在SQL Server 2005/2008中有内置函数吗?或者我需要使用辅助桌吗?
当前回答
在SQL Server 2012及以后的版本中,您可以使用FORMAT函数
SELECT FORMAT(GETDATE(), 'dddd')
其他回答
这是一个工作副本的我的代码检查它,如何从日期检索日期名称在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
尽管SQLMenace的答案已经被接受,但是您应该注意一个重要的SET选项
设置DATEFIRST
如果一周的第一天发生了如下所示的变化,那么DATENAME将返回正确的日期名称,但不是相同的DATEPART值。
declare @DefaultDateFirst int
set @DefaultDateFirst = @@datefirst
--; 7 First day of week is "Sunday" by default
select [@DefaultDateFirst] = @DefaultDateFirst
set datefirst @DefaultDateFirst
select datename(dw,getdate()) -- Saturday
select datepart(dw,getdate()) -- 7
--; Set the first day of week to * TUESDAY *
--; (some people start their week on Tuesdays...)
set datefirst 2
select datename(dw,getdate()) -- Saturday
--; Returns 5 because Saturday is the 5th day since Tuesday.
--; Tue 1, Wed 2, Th 3, Fri 4, Sat 5
select datepart(dw,getdate()) -- 5 <-- It's not 7!
set datefirst @DefaultDateFirst
使用DATENAME或DATEPART:
SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6
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
在SQL Server 2012及以后的版本中,您可以使用FORMAT函数
SELECT FORMAT(GETDATE(), 'dddd')