GBase 8a数据库week函数模式,获得指定日期的星期

GBase 8a数据库可以获得指定日期是这一年的第几个星期(week函数),其中涉及到每周第一天是星期日还是星期一,返回值从0开始还是1开始,以及跨年的情况。

提醒

week函数的模式8和9是中国模式,只要有1天在这一年,那就算第1周,且没有0周,比如2020-01-01。

函数

week(date, mode)
weekofyear(date)

参数

date 日期

mode 模式,见后面介绍

说明

该函数返回日期的星期数。
两个参数形式的 WEEK()允许用户指定周是否以星期日或星期一开始,以及返回
值范围。
如果忽略了 mode 参数,则使用系统变量 default_week_format 的值。

weekofyear等同于week(date,3)

样例

贴一下日历,选择2020年底的情况

先看运行结果

week

gbase> select 0,week('2020-12-26',0) '2020-12-26',week('2020-12-27',0) '2002-12-27',week('2020-12-28',0) '2002-12-28',week('2020-12-29',0) '2002-12-29',week('2020-12-30',0) '2020-12-30',week('2020-12-31',0) '2020-12-31',week('2021-1-1',0) '2021-01-01',week('2021-1-2',0) '2021-01-02' ,week('2021-1-3',0) '2021-01-03',week('2021-01-04',0) '2021-01-04' union all
    -> select 1,week('2020-12-26',1),week('2020-12-27',1),week('2020-12-28',1),week('2020-12-29',1),week('2020-12-30',1),week('2020-12-31',1),week('2021-1-1',1),week('2021-1-2',1),week('2021-1-3',1),week('2021-1-4',1) union all
    -> select 2,week('2020-12-26',2),week('2020-12-27',2),week('2020-12-28',2),week('2020-12-29',2),week('2020-12-30',2),week('2020-12-31',2),week('2021-1-1',2),week('2021-1-2',2),week('2021-1-3',2),week('2021-1-4',2) union all
    -> select 3,week('2020-12-26',3),week('2020-12-27',3),week('2020-12-28',3),week('2020-12-29',3),week('2020-12-30',3),week('2020-12-31',3),week('2021-1-1',3),week('2021-1-2',3),week('2021-1-3',3),week('2021-1-4',3) union all
    -> select 4,week('2020-12-26',4),week('2020-12-27',4),week('2020-12-28',4),week('2020-12-29',4),week('2020-12-30',4),week('2020-12-31',4),week('2021-1-1',4),week('2021-1-2',4),week('2021-1-3',4),week('2021-1-4',4) union all
    -> select 5,week('2020-12-26',5),week('2020-12-27',5),week('2020-12-28',5),week('2020-12-29',5),week('2020-12-30',5),week('2020-12-31',5),week('2021-1-1',5),week('2021-1-2',5),week('2021-1-3',5),week('2021-1-4',5) union all
    -> select 6,week('2020-12-26',6),week('2020-12-27',6),week('2020-12-28',6),week('2020-12-29',6),week('2020-12-30',6),week('2020-12-31',6),week('2021-1-1',6),week('2021-1-2',6),week('2021-1-3',6),week('2021-1-4',6) union all
    -> select 7,week('2020-12-26',7),week('2020-12-27',7),week('2020-12-28',7),week('2020-12-29',7),week('2020-12-30',7),week('2020-12-31',7),week('2021-1-1',7),week('2021-1-2',7),week('2021-1-3',7),week('2021-1-4',7) union all
    -> select 8,week('2020-12-26',8),week('2020-12-27',8),week('2020-12-28',8),week('2020-12-29',8),week('2020-12-30',8),week('2020-12-31',8),week('2021-1-1',8),week('2021-1-2',8),week('2021-1-3',8),week('2021-1-4',8) union all
    -> select 9,week('2020-12-26',9),week('2020-12-27',9),week('2020-12-28',9),week('2020-12-29',9),week('2020-12-30',9),week('2020-12-31',9),week('2021-1-1',9),week('2021-1-2',9),week('2021-1-3',9),week('2021-1-4',9)
    -> ;
+---+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
| 0 | 2020-12-26 | 2002-12-27 | 2002-12-28 | 2002-12-29 | 2020-12-30 | 2020-12-31 | 2021-01-01 | 2021-01-02 | 2021-01-03 | 2021-01-04 |
+---+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
| 0 |         51 |         52 |         52 |         52 |         52 |         52 |          0 |          0 |          1 |          1 |
| 1 |         52 |         52 |         53 |         53 |         53 |         53 |          0 |          0 |          0 |          1 |
| 2 |         51 |         52 |         52 |         52 |         52 |         52 |         52 |         52 |          1 |          1 |
| 3 |         52 |         52 |         53 |         53 |         53 |         53 |         53 |         53 |         53 |          1 |
| 4 |         52 |         53 |         53 |         53 |         53 |         53 |          0 |          0 |          1 |          1 |
| 5 |         51 |         51 |         52 |         52 |         52 |         52 |          0 |          0 |          0 |          1 |
| 6 |         52 |         53 |         53 |         53 |         53 |         53 |         53 |         53 |          1 |          1 |
| 7 |         51 |         51 |         52 |         52 |         52 |         52 |         52 |         52 |         52 |          1 |
| 8 |         52 |         53 |         53 |         53 |         53 |         53 |          1 |          1 |          2 |          2 |
| 9 |         52 |         52 |         53 |         53 |         53 |         53 |          1 |          1 |          1 |          2 |
+---+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
10 rows in set (Elapsed: 00:00:00.00)

gbase>

weekofyear

gbase> set @d='2021-01-01';
Query OK, 0 rows affected (Elapsed: 00:00:00.01)

gbase> select week(@d),weekofyear(@d);
+----------+----------------+
| week(@d) | weekofyear(@d) |
+----------+----------------+
|        0 |             53 |
+----------+----------------+
1 row in set (Elapsed: 00:00:00.01)

gbase> select week(@d,3),weekofyear(@d);
+------------+----------------+
| week(@d,3) | weekofyear(@d) |
+------------+----------------+
|         53 |             53 |
+------------+----------------+
1 row in set (Elapsed: 00:00:00.00)

模式的说明

模式周第一天范围第一周指的是
0Sunday0-53这一年包含了一个星期日
1Monday0-53这一年包含4或更多的天数
2Sunday1-53这一年包含了一个星期日
3Monday1-53这一年包含4或更多的天数
4Sunday0-53这一年包含4或更多的天数
5Monday0-53这一年包含了一个星期一
6Sunday1-53这一年包含4或更多的天数
7Monday1-53这一年包含了一个星期一
8Sunday1-54只要有一天就算第一周
9Monday1-54只要有一天就算第一周

解析一下

比如模式7,是周一开始,且要求这一年必须包含一个星期一。
而2021-01-03这一周,是从2020-12-28 – 2021-01-13, 从2020年的周一到2021年的周日,那么他们算一周,而且属于【上一年2020年】的52周(因为周一属于2020年)。
而2021-01-04是周一,属于2021年,所以是2021年的第一周的第一天。

说明

1、周日还是还是周一开始,是第一个选项

2、周是0开始还是1开始,是第二个选项

3、是包含一个星期日,还是星期一,还是最少有4天

4、模式8和9是中国模式,只要有1天在这一年,那就算第1周,且没有0周。

参考

该模式可以通过数据库default_week_format进行设置,实现不同地区的快速切换

GBase 8a数据库配置参数default_week_format设置星期的模式

GBase 8a数据库week函数模式,获得指定日期的星期》有1条评论

发表评论

您的电子邮箱地址不会被公开。