MySQL yearweek()vs week()返回不同的结果

Joh*_*ohn 5 mysql sql date

这个简单的查询似乎没有输出正确的结果.鉴于模式是相同的(1)所有函数不应该"周("2018-12-31",1)"显示值1而不是53?

SELECT yearweek("2018-12-31", 1), yearweek("2019-01-02", 1),
week("2018-12-31", 1), week("2019-01-02", 1)    
Run Code Online (Sandbox Code Playgroud)

输出以下内容.

'201901','201901','53','1'
Run Code Online (Sandbox Code Playgroud)

我需要在某处设置默认开发设备吗?

Sal*_*n A 2

WEEK从函数描述中看一下这个例子:

\n\n
\n
mysql> SELECT YEAR(\'2000-01-01\'), WEEK(\'2000-01-01\',0);\n        -> 2000, 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

有人可能会认为WEEK()应该返回 52,因为给定的日期\n 实际上发生在 1999 年的第 52 周。相反,WEEK()返回0\n 使得返回值是 \xe2\x80\x9c 给定年份中的周数。\xe2\x80\ x9d

\n
\n\n

上面似乎表明所有具有 0-53 范围的模式都会返回相对于输入日期年份的周数(如果日期落在上一年的最后一周,它将返回 0)。

\n\n

因此,如果一年的第一天 = 星期一,一年的第一周 = 今年有 4 天或更多天,则2018-12-31属于 2018 年第 53 周 - 和 - 2019 年第一周,并且 mode 参数决定返回值:

\n\n
SELECT WEEK(\'2018-12-31\', 1); -- 53\nSELECT WEEK(\'2018-12-31\', 3); -- 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

YEARWEEK函数是明确的(结果包括年份),因此上述内容不适用。

\n