我有一个查询,我得到一个日期的WeekDay但默认情况下:
星期日= 1
Moday = 2
等等
功能是:
DATEPART(dw,ads.date) as weekday
Run Code Online (Sandbox Code Playgroud)
我需要结果:
星期天= 7
星期一= 1
等等
这样做有什么捷径吗?或者我必须做一个CASE statement?
SQL*_*hao 54
这样做.
SET DATEFIRST 1;
-- YOUR QUERY
Run Code Online (Sandbox Code Playgroud)
例子
-- Sunday is first day of week
set datefirst 7;
select DATEPART(dw,getdate()) as weekday
-- Monday is first day of week
set datefirst 1;
select DATEPART(dw,getdate()) as weekday
Run Code Online (Sandbox Code Playgroud)
Gre*_*ill 37
您可以使用如下公式:
(weekday + 5) % 7 + 1
Run Code Online (Sandbox Code Playgroud)
如果您决定使用它,那么值得通过一些示例来说服自己它实际上做了您想要的.
另外:为了不受DATEFIRST变量的影响(它可以设置为1到7之间的任何值),真正的公式是:
(weekday + @@DATEFIRST + 5) % 7 + 1
Run Code Online (Sandbox Code Playgroud)
Dav*_*idG 12
您可以告诉SQL Server使用星期一作为一周的开始使用DATEFIRST,如下所示:
SET DATEFIRST 1
Run Code Online (Sandbox Code Playgroud)
Gor*_*off 10
我建议您自己编写案例陈述datename():
select (case datename(dw, aws.date)
when 'Monday' then 1
when 'Tuesday' then 2
when 'Wednesday' then 3
when 'Thursday' then 4
when 'Friday' then 5
when 'Saturday' then 6
when 'Sunday' then 7
end)
Run Code Online (Sandbox Code Playgroud)
至少,如果有人在周开始的那一天更改参数,则不会改变.另一方面,它易受SQL Server选择的语言的影响.
无论设置如何,您都可以使用此公式DATEFIRST:
((DatePart(WEEKDAY, getdate()) + @@DATEFIRST + 6 - [first day that you need] ) % 7) + 1;
Run Code Online (Sandbox Code Playgroud)
为了monday = 1
((DatePart(WEEKDAY, getdate()) + @@DATEFIRST + 6 - 1 ) % 7) + 1;
Run Code Online (Sandbox Code Playgroud)
并为sunday = 1
((DatePart(WEEKDAY, getdate()) + @@DATEFIRST + 6 - 7 ) % 7) + 1;
Run Code Online (Sandbox Code Playgroud)
并为friday = 1
((DatePart(WEEKDAY, getdate()) + @@DATEFIRST + 6 - 5 ) % 7) + 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115400 次 |
| 最近记录: |