一尘不染

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

sql

这个简单的查询似乎没有输出正确的结果。鉴于所有功能的模式都相同(1),“ week(“ 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)

输出以下内容。

'201901','201901','53','1'

我需要在某个地方设置更多默认开发人员吗?


阅读 211

收藏
2021-05-23

共1个答案

一尘不染

WEEK函数描述看这个例子:

mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
        -> 2000, 0

可能有人争辩说WEEK()应该返回52,因为给定的日期实际上发生在1999年的第52周。WEEK()返回0则返回值是``给定年份的周数’‘。

上面的内容似乎暗示所有具有0-53范围的模式都将返回相对于输入日期的年份的星期数(如果日期位于上一年的最后一周,则它将返回0)。

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

SELECT WEEK('2018-12-31', 1); -- 53
SELECT WEEK('2018-12-31', 3); -- 1

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

2021-05-23