这个简单的查询似乎没有输出正确的结果。如果模式相同(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'
是否需要在某个地方设置默认的dev more?
yhuiod9q1#
模式1中的week():一周的第一天是星期一,一年的第一周有3天以上。因此,2018年从第1周开始,而不是从第0周开始(因为2018年1月1日这一周的时间超过了2018年的3天)。因此,2018年12月31日属于第53周。同样,2019年从2019年1月1日至2019年1月6日的第1周开始,从2019年1月7日至2019年1月13日的第2周开始(因为星期一是一周的第一天,包含1月1日的一周有2019年的6天)
qyyhg6bp2#
请看下面这个例子 WEEK 功能描述:
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年第1周,模式参数决定返回值:
WEEK()
0
2018-12-31
SELECT WEEK('2018-12-31', 1); -- 53 SELECT WEEK('2018-12-31', 3); -- 1
这个 YEARWEEK 函数是明确的(结果包括年份),所以上述不适用。
YEARWEEK
2条答案
按热度按时间yhuiod9q1#
模式1中的week():一周的第一天是星期一,一年的第一周有3天以上。
因此,2018年从第1周开始,而不是从第0周开始(因为2018年1月1日这一周的时间超过了2018年的3天)。因此,2018年12月31日属于第53周。
同样,2019年从2019年1月1日至2019年1月6日的第1周开始,从2019年1月7日至2019年1月13日的第2周开始(因为星期一是一周的第一天,包含1月1日的一周有2019年的6天)
qyyhg6bp2#
请看下面这个例子
WEEK
功能描述:有人可能会说
WEEK()
应该返回52,因为给定的日期实际上发生在1999年的第52周。WEEK()
退货0
相反,返回值是“给定年份中的周数”以上似乎表明,所有0-53范围的模式都将返回相对于输入日期年份的周数(如果日期落在上一年的最后一周,则返回0)。
所以,如果一年中的第一天=周一,一年中的第一周=今年有4天或更多天,那么
2018-12-31
属于2018年第53周-2019年第1周,模式参数决定返回值:这个
YEARWEEK
函数是明确的(结果包括年份),所以上述不适用。