计算某一年的某一周,是哪一天,其实有7个,随便出一个即可,也yearweek函数是相反的效果。
本周第一天或指定日期所在周的第一天,请参考 GBase 8a数据库获得本周的第一天,指定日期所在周的第一天的方法
如果固定,每年第一周都是从1月1日开始,那么简单的将年加上1月1日就行了,比如
select concat(year,'-01-01')
如果是其它周,可以用date_add增加日期,比如,虽然不是那一周的第一天,但确实属于指定的周。
gbase> select date_add('2020-01-01',interval 1 week);
+----------------------------------------+
| date_add('2020-01-01',interval 1 week) |
+----------------------------------------+
| 2020-01-08 00:00:00 |
+----------------------------------------+
1 row in set (Elapsed: 00:00:00.00)
如果是国际标准,那么就要区分是周一是第一天还是周日是第一天,如果是周一
gbase> select str_to_date(concat('202001',' Monday'),'%X%V %W');
+---------------------------------------------------+
| str_to_date(concat('202001',' Monday'),'%X%V %W') |
+---------------------------------------------------+
| 2020-01-06 |
+---------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> select str_to_date(concat('202001',' Sunday'),'%x%v %W');
+---------------------------------------------------+
| str_to_date(concat('202001',' Sunday'),'%x%v %W') |
+---------------------------------------------------+
| 2020-01-05 |
+---------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)
注意如果是周一,那么用大写的%X和%V, 如果是周日,那么是小写的。详情看SQL手册里关于DATE_FORMAT函数的说明。
如上的周,可以是任意一周,比如
gbase> select str_to_date(concat('202002',' Sunday'),'%x%v %W');
+---------------------------------------------------+
| str_to_date(concat('202002',' Sunday'),'%x%v %W') |
+---------------------------------------------------+
| 2020-01-12 |
+---------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> select str_to_date(concat('202002',' Monday'),'%X%V %W');
+---------------------------------------------------+
| str_to_date(concat('202002',' Monday'),'%X%V %W') |
+---------------------------------------------------+
| 2020-01-13 |
+---------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)