南大通用GBase 8a数据库某年第几周的具体日期

计算某一年的某一周,是哪一天,其实有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)