5

我想从 MySQL 获取给定日期的周数和年份,并遵循以下规则:

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

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

日期和时间功能:WEEK(date[,mode])

我在法国日历上,所以我必须从星期一开始一周,第一周是今年第一周超过 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 并且如果 weeknumber = 53 和 month = 1 然后 year - 1

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

问候

4

1 回答 1

2

好的,我想我明白你现在想要做什么。

正如文档所说:

我们决定返回 0,因为我们希望函数返回“给定年份的周数”。</p>

如果您想要该周所在年份的周数,他们建议使用该YEARWEEK()函数,该函数采用与以下相同的模式参数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'
于 2012-06-11T10:47:35.907 回答