mysql日期函数的bug

来源:互联网 发布:淘宝几天售后 编辑:程序博客网 时间:2024/05/24 06:40

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!!!

 

原创粉丝点击