在SQL 2005/2008中获取星期几
如果我有01/01/2009的date,我想知道星期一,星期二等星期几。
SQL 2005/2008中是否有内置函数? 或者我需要使用辅助表?
使用DATENAME
或DATEPART
:
SELECT DATENAME(dw,GETDATE()) -- Friday SELECT DATEPART(dw,GETDATE()) -- 6
尽pipeSQLMenace的答案已被接受,但还有一个重要的SET
选项应该注意
SET DATEFIRST
DATENAME将返回正确的date名称,但如果一周中的第一天更改如下所示,则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
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
要获得给定date的星期几的确定性值,可以使用DATEPART ()和@@ datefirst的组合。 否则,你依赖于服务器上的设置。
查看以下网站以获得更好的解决scheme: MS SQL:星期几
然后,星期几将在0到6的范围内,其中0表示星期日,1表示星期一等。然后,您可以使用简单的case语句返回正确的星期几名称。
欧洲:
declare @d datetime; set @d=getdate(); set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);
使用SQL Server 2012及以后,您可以使用FORMAT
function
SELECT FORMAT(GETDATE(), 'dddd')
这是我的代码检查它的工作副本,如何从date在sql中检索date名称
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
快乐编码….
你可能会发现这个版本有用。
-- 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
如果您不想依靠@@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日)。