mysql给定年份和星期一的日期,模式7

of1yzvn4  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(342)

我想通过给定的周数和年份来得到第一个星期一的日期。
我发现这个代码: SELECT STR_TO_DATE(CONCAT('20131',' Monday'), '%x%v %W') as MQK; 它在大多数情况下都有效,如下所示 mode 3 ,但我想把它放进去 mode 7 . 日期和时间函数
例如,如果年份为2013年第1周,则会给出:

mysql> SELECT STR_TO_DATE(CONCAT('20131',' Monday'), '%x%v %W') as first_day;
+------------+
| first_day  |
+------------+
| 2012-12-31 |
+------------+
1 row in set (0.00 sec)

我在等一个约会 2013-01-07 .
有可能吗?

eit6fx6z

eit6fx6z1#

您必须实现一个条件来模拟模式7行为。

SELECT @y := 2013 as `@y`, @w := 1 as `@w`,
       @d := STR_TO_DATE(CONCAT(@y, @w, ' Monday'), '%x%v %W') as `@d`,
       IF (YEAR(@d) < @y, DATE_ADD(@d, INTERVAL 1 WEEK), @d) as first_day;

你会得到:

+------+----+------------+------------+
| @y   | @w | @d         | first_day  |
+------+----+------------+------------+
| 2013 |  1 | 2012-12-31 | 2013-01-07 |
+------+----+------------+------------+

2007年1月1日是一年中的第一个星期一:

SELECT @y := 2007 as `@y`, @w := 1 as `@w`,
       @d := STR_TO_DATE(CONCAT(@y, @w, ' Monday'), '%x%v %W') as `@d`,
       IF (YEAR(@d) < @y, DATE_ADD(@d, INTERVAL 1 WEEK), @d) as first_day;

+------+----+------------+------------+
| @y   | @w | @d         | first_day  |
+------+----+------------+------------+
| 2007 |  1 | 2007-01-01 | 2007-01-01 |
+------+----+------------+------------+

新增2018-10-25:
所以,显然这对2013年第2周不起作用,它在中使用上述查询结果 2013-01-07 实际上是第一周的星期一。事后看来,基于我最初提出的方法,这是很明显的,显而易见的解决方案突然出现在我眼前。

SELECT @y := 2013 as `@y`, @w := 1 as `@w`,
       @d := STR_TO_DATE(CONCAT(@y, @w, ' Monday'), '%x%v %W') as `@d`,
       IF (WEEK(@d, 7) <> @w, DATE_ADD(@d, INTERVAL 1 WEEK), @d) as first_day;

+------+----+------------+------------+
| @y   | @w | @d         | first_day  |
+------+----+------------+------------+
| 2013 |  1 | 2012-12-31 | 2013-01-07 |
+------+----+------------+------------+

SELECT @y := 2013 as `@y`, @w := 2 as `@w`,
       @d := STR_TO_DATE(CONCAT(@y, @w, ' Monday'), '%x%v %W') as `@d`,
       IF (WEEK(@d, 7) <> @w, DATE_ADD(@d, INTERVAL 1 WEEK), @d) as first_day;

+------+----+------------+------------+
| @y   | @w | @d         | first_day  |
+------+----+------------+------------+
| 2013 |  2 | 2013-01-07 | 2013-01-14 |
+------+----+------------+------------+

嘿。

相关问题