按照中国习惯,每年的1月1日算第一周,即使这一天是星期日,这一周只有1天也算一周。这主要用于一些按周建表的场景,比如202001, 否则这一天的数据就没有周表可以用了。
GBase提供了一个新的weekMode来适应这个需求。
目录导航
样例
2017年1月1日是星期日,这一周只有1天。
这个模式保证第一天肯定是第一周。
gbase> SELECT YEAR('2017-01-01'), WEEK('2017-01-01',8) FROM dual;
+--------------------+----------------------+
| YEAR('2017-01-01') | WEEK('2017-01-01',8) |
+--------------------+----------------------+
| 2017 | 1 |
+--------------------+----------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> SELECT YEAR('2017-01-01'), WEEK('2017-01-01',9) FROM dual;
+--------------------+----------------------+
| YEAR('2017-01-01') | WEEK('2017-01-01',9) |
+--------------------+----------------------+
| 2017 | 1 |
+--------------------+----------------------+
1 row in set (Elapsed: 00:00:00.00)
而8和9的区别就是星期日和星期一哪个是第一天的区别,比如2017-1-2在模式8里还是第一周,而模式9就是第二周了。
gbase> SELECT YEAR('2017-01-01'), WEEK('2017-01-02',8) FROM dual;
+--------------------+----------------------+
| YEAR('2017-01-01') | WEEK('2017-01-02',8) |
+--------------------+----------------------+
| 2017 | 1 |
+--------------------+----------------------+
1 row in set (Elapsed: 00:00:00.01)
gbase> SELECT YEAR('2017-01-01'), WEEK('2017-01-02',9) FROM dual;
+--------------------+----------------------+
| YEAR('2017-01-01') | WEEK('2017-01-02',9) |
+--------------------+----------------------+
| 2017 | 2 |
+--------------------+----------------------+
1 row in set (Elapsed: 00:00:00.00)
模式的说明
模式 | 周第一天 | 范围 | 第一周指的是 |
0 | Sunday | 0-53 | 这一年包含了一个星期日 |
1 | Monday | 0-53 | 这一年包含4或更多的天数 |
2 | Sunday | 1-53 | 这一年包含了一个星期日 |
3 | Monday | 1-53 | 这一年包含4或更多的天数 |
4 | Sunday | 0-53 | 这一年包含4或更多的天数 |
5 | Monday | 0-53 | 这一年包含了一个星期一 |
6 | Sunday | 1-53 | 这一年包含4或更多的天数 |
7 | Monday | 1-53 | 这一年包含了一个星期一 |
8 | Sunday | 1-54 | 只要有一天就算第一周 |
9 | Monday | 1-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周。