349 sql sql-server datetime
如果我有一个日期01/01/2009,我想知道它是什么日子,例如周一,周二等...
SQL 2005/2008中是否有内置函数?或者我需要使用辅助表吗?
SQL*_*ace 668
SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6
Run Code Online (Sandbox Code Playgroud)
dan*_*die 94
尽管SQLMenace的答案已被接受,但SET您应该注意一个重要的选项
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
Run Code Online (Sandbox Code Playgroud)
Sut*_*rth 24
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
Run Code Online (Sandbox Code Playgroud)
小智 12
要获得给定日期的星期几的确定性值,您可以使用DATEPART ()和@@ datefirst的组合.否则您依赖于服务器上的设置.
请查看以下站点以获得更好的解决方案:MS SQL:星期几
然后,星期几将在0到6的范围内,其中0表示星期日,1表示星期一,等等.然后,您可以使用简单的case语句返回正确的工作日名称.
小智 11
欧洲:
declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);
Run Code Online (Sandbox Code Playgroud)
使用SQL Server 2012及更高版本,您可以使用该FORMAT功能
SELECT FORMAT(GETDATE(), 'dddd')
Run Code Online (Sandbox Code Playgroud)