这个简单的查询似乎没有输出正确的结果。鉴于所有功能的模式都相同(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'
是否需要在某个地方设置更多默认开发人员?
答案 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年)