SQL Server的MySql%w日期格式参数等效项



在MySQL中,我们使用"%w"格式参数来获取一周中的哪一天。SQL Server等效于什么?我用了"ddd",但它给我的是日期名称(例如:Saturday(,而不是数字。有什么建议吗?

这就是我尝试过的:

select FORMAT( SYSDATETIME(), 'ddd', 'fa-IR' )

我知道DATEPART(weekday , GETDATE()),但缺少culture参数。

MySQL的%w没有精确的副本,它总是(0=周日..6=周六(

在任何SQL Server实例中,每次周日获取0的最简单方法是:

datediff(day,-1,[yourdate_value]) % 7

这样做的目的是计算自1899-12-31年(星期日(以来的天数,然后提供除以7的余数。0的结果总是周日,6的结果总是周六。

NBT-SQL使用1900-01-01(星期一(的基准日期,该基准日期可以在T-SQL日期函数(如datediff(中用0表示。所以-1比基准日期少了一天。您可以使用任何可靠的周日日期,例如,而不是-1

select datediff(day,'20181104',getdate()) % 7, datediff(day,-1,getdate()) % 7

并且两列总是(0=周日..6=周六(


如果您不使用上面的设置,请注意,在MS SQL Server中,可以更改表示零的星期几,此设置称为datefirst,您可以使用访问此设置的当前值

select @@datefirst

SQL Server中的日期第一个值7=MySQL%w,共0个(星期日(。datefirst的初始设置通常是通过选择语言来建立的,您可以使用以下查询找到依赖于语言的datefirst值:

select alias, name, dateformat, datefirst
from sys.syslanguages
alias                 name          dateformat   datefirst  
---- --------------------- -------------------- ------------ ----------- 
1   English               us_english           mdy                  7  
2   German                Deutsch              dmy                  1  
3   French                Français             dmy                  1  
4   Japanese              日本語                ymd                  7  
5   Danish                Dansk                dmy                  1  
6   Spanish               Español              dmy                  1  
7   Italian               Italiano             dmy                  1  
8   Dutch                 Nederlands           dmy                  1  
9   Norwegian             Norsk                dmy                  1  
10   Portuguese            Português            dmy                  7  
11   Finnish               Suomi                dmy                  1  
12   Swedish               Svenska              ymd                  1  
13   Czech                 čeština              dmy                  1  
14   Hungarian             magyar               ymd                  1  
15   Polish                polski               dmy                  1  
16   Romanian              română               dmy                  1  
17   Croatian              hrvatski             ymd                  1  
18   Slovak                slovenčina           dmy                  1  
19   Slovenian             slovenski            dmy                  1  
20   Greek                 ελληνικά             dmy                  1  
21   Bulgarian             български            dmy                  1  
22   Russian               русский              dmy                  1  
23   Turkish               Türkçe               dmy                  1  
24   British English       British              dmy                  1  
25   Estonian              eesti                dmy                  1  
26   Latvian               latviešu             ymd                  1  
27   Lithuanian            lietuvių             ymd                  1  
28   Brazilian             Português (Brasil)   dmy                  7  
29   Traditional Chinese   繁體中文             ymd                  7  
30   Korean                한국어               ymd                  7  
31   Simplified Chinese    简体中文             ymd                  7  
32   Arabic                Arabic               dmy                  1  
33   Thai                  ไทย                  dmy                  7  
34   Bokmål                norsk (bokmål)       dmy                  1  

函数DATEPART(WEEKDAY, YourDateColumn)响应日期优先设置,因此如果日期优先设置为7,并且日期部分值为0,则为星期日。如果datefirst设置为1,那么datepart值0表示星期一。以下是对这种(经常令人困惑的(关系的讨论。

您可以使用以下选项覆盖这些默认设置:

SET DATEFIRST 7 ;  
SELECT DATEPART(WEEKDAY, [yourdate_value])

现在(0=周日..6=周六(

您想要DATEPART:

DATEPART(WEEKDAY, YourDateColumn)

请注意,返回值因语言而异,因为不同的语言将不同的日子视为一周中的第一天。