当前位置:  开发笔记 > 编程语言 > 正文

在SQL 2005/2008中获取星期几

如何解决《在SQL2005/2008中获取星期几》经验,为你挑选了6个好方法。

如果我有一个日期01/01/2009,我想知道它是什么日子,例如周一,周二等...

SQL 2005/2008中是否有内置函数?或者我需要使用辅助表吗?



1> SQLMenace..:

使用DATENAMEDATEPART:

SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6


这就是为什么我更喜欢使用select datename(weekday,getdate()).我不必记得dw返回工作日....当我可以使用"工作日"代替.
任何人都可以看一眼 - 注意**默认的周开始是星期日**.看看@ Sung关于如何安全地改变它的答案
@niico是因为SQL索引从1开始,而C语言索引从0开始.

2> dance2die..:

尽管SQLMenace的答案已被接受,但SET您应该注意一个重要的选项

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


因此,为了得到常量的datepart值,你做`(@@ datefirst - 1 + datepart(weekday,thedate))%7`.星期天总是零.
有趣的是,.NET的`DayOfWeek`枚举的'DayOfWeek.Sunday`值为......`0`.因此,无论`DateFirst`被设置为什么,_untreated_ SQL返回的`WEEKDAY`值永远不会与.NET对应的值兼容.是的,微软.

3> Sutirth..:
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


你应该知道,这是一个内置的功能来实现同样的目标.`select datename(dw,getdate())`
@SohamDasgupta这个内置函数不会为非英文版的MS SQL返回相同的结果.

4> 小智..:

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

请查看以下站点以获得更好的解决方案:MS SQL:星期几

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


请将答案放入答案中,以便人们无需点击链接即可获得答案.

5> 小智..:

欧洲:

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


请说明您的代码的作用以及它如何回答问题.如果你得到一个代码片段作为答案,你可能不知道如何处理它.答案应该为OP和未来的访问者提供有关如何调试和解决问题的指导.指出代码背后的想法,有助于理解问题并应用或修改您的解决方案.

6> Chris Stillw..:

使用SQL Server 2012及更高版本,您可以使用该FORMAT功能

SELECT FORMAT(GETDATE(), 'dddd')

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有