mysql版本:5.2.16 OSS Beta Revision 5249
昨天在用mysql的日期函数的时候发现这样一个有趣的事情。如下:
SELECT DAYOFWEEK('2011-03-26'),DAYNAME('2011-03-26'),WEEKOFYEAR('2011-03-26');
-- 结果:'7', 'Saturday', '12'
SELECT DAYOFWEEK('2011-03-27'),DAYNAME('2011-03-27'),WEEKOFYEAR('2011-03-27');
-- 结果:'1', 'Sunday', '12'
SELECT DAYOFWEEK('2011-03-28'),DAYNAME('2011-03-28'),WEEKOFYEAR('2011-03-28');
-- 结果:'2', 'Monday', '13'
这个查询结果很有趣,不知道有没有发现。
从查询结果出发得出这样的结论:
'2011-03-26' 是Saturday,一个星期的最后一天:7. 同时这周是一年中的第12周。
'2011-03-27'是Sunday,一个星期的第一天:1.
'2011-03-28'是Monday,一个星期的第二天:2.
从上面,我们得出。周是以周日为一周的第一天算的。
到此,做个推理:'2011-03-26' 这周是一年中的第12周,这个没有问题。
那么,很容易想到'2011-03-27'这周是一年周的第13周,和'2011-03-28'是在同一周。
我们再看查询结果,发现:
-- 结果:'1', 'Sunday', '12' 即'2011-03-27'这周,在结果中显示是一年周的第12周。
-- 结果:'2', 'Monday', '13'即2011-03-28'这周,在结果中显示是一年周的第13周。
这里的结果显示:周日是位于上一周,是一周的结束。
和刚得到的结果:周日是一周的开始,相矛盾。
DAYOFWEEK这个日期函数和WEEKOFYEAR日期函数有一个混淆的地方:一周开始的定义不一样。MYSQL 5.2.16 BUG!!!