mysql没有weekyear函数

时间:2014-06-24 01:55:29

标签: mysql sql

让我们来看看周年:

在标准的ISO8601周算法中,一年中的第一周是一年中至少4天。根据这一定义,第一周的第1天可能是前一年,而一年的最后一天可能是在第二年的第一周

考虑日期' 2013-12-30' &安培; ' 2013-12-31',在MySQL中:

select weekofyear('2013-12-30') 

返回1,意味着2013-12-30是在2014年的第一周,所以周年纪念日是2013-12-30'应该是2014年,但在MySQL中,我只找到了2年的功能:

select year('2013-12-30') -- return 2013,certainly the year field
select yearweek('2013-12-30') -- return 201352,not correct,should be 201401

因为那一周在2013年离开了3天,在2014年离开了4天,所以那一周的那一周应该是2014年。

如何在mysql中获得正确的结果?

更新 我发现:

select yearweek('2013-12-30',3)

返回201401,这是根据ISO8601周算法的正确结果,但我怎样才能分别获得2014年周年和01年周?

2 个答案:

答案 0 :(得分:1)

修改: 您可以使用mode参数和字符串函数来获得所需的结果,如下所示:

select 
    LEFT(yearweek('2013-12-30', 3), 4) AS yr, 
    RIGHT(yearweek('2013-12-30', 3), 2) AS wk

<强>参考

YEARWEEK(date,mode) on MySQL Reference Manual

答案 1 :(得分:0)

我已经弄清楚了,因为年周(日期,3)返回一个6位数的int,所以我可以将年份除以100得分:

SELECT count(1) as count, yearweek(time,3) DIV 100 as year,weekofyear(time) as week FROM XXX

会给我我想要的东西。