用Mysql结束一年

时间:2012-06-11 10:15:09

标签: mysql sql

我希望在给定日期之前使用以下规则获取MySQL的周数和年份:

  • 如果日期是年末,但是在第二年的第一周,我需要返回1作为周数。
  • 如果日期是年初,但是在上一年的最后一周,我需要返回52(或53)作为周数。

我已经阅读了MySQL中的周函数,但我无法得到我想要的结果。

Date and Time Functions: WEEK(date[,mode])

我在法国日历上,所以我必须在星期一开始这一周,而第1周是今年超过3天的第一周。

因此我只能使用选项1和3。

当我写下面的查询时:

  • 选择周('2012-12-31',3),结果为1

  • 选择周('2012-12-31',1),结果为53

当我在2016年1月1日进行测试时:

  • 选择周('2016-1-1',3),结果为53

  • 选择周('2016-1-1',1),结果为0

不能使用选项1,因为我无法检测到2012-12-31是否在明年。

可以使用选项3,但我添加了两个逻辑:如果weeknumber = 1,month = 12,year + 1,如果weekumber = 53,month = 1则是year - 1

有人有更好的解决方案吗?

此致

1 个答案:

答案 0 :(得分:2)

好的,我想我得到了你现在要做的事。

正如文件所说:

  

我们决定返回0,因为我们希望函数返回   “特定年份的周数。”

如果您想要本周所在年份的周数,他们建议使用YEARWEEK() function,它采用与WEEK()相同的模式参数:

  

如果您希望对结果进行评估   包含给定日期的一周的第一天的年份...   使用YEARWEEK()函数:

 mysql> SELECT YEARWEEK('2000-01-01');
         -> 199952
 mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);
         -> '52'

所以你使用的一些例子:

mysql> SELECT MID(YEARWEEK('2012-1-1',3),5,2)
         -> '52'
mysql> SELECT MID(YEARWEEK('2012-12-31',3),5,2)
         -> '01'