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

时间:2019-01-03 10:47:41

标签: mysql sql date

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

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

2 个答案:

答案 0 :(得分:2)

请看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函数是明确的(结果包括年份),因此上面的内容不适用。

答案 1 :(得分:0)

week()在模式1中:一周的第一天是星期一,一年的第一周超过3天。

因此2018年从第一周开始而不是从0周开始(因为2018年1月1日这一周有超过三天的2018年)。因此,2018年12月31日属于第53周。

类似地,2019年开始于2019年1月1日至2019年1月6日的第一周,以及第二周从2019年7月1日至2019年1月13日(因为星期一是该周的第一天,该周包含1月1日为6天,2019年)