南大通用GBase 8a和天day有关的函数使用和样例汇总

本文汇总GBase 8a数据库集群内置的与天有关的各个函数的语法、说明和使用样例。

DAYOFWEEK

返回 date (1 = 周日, 2 = 周一, …, 7 = 周六)对应的工作日索引。

详情请查看连接内该函数的详细介绍。

WEEKDAY

返回 date 对应的星期索引(0=Monday,1=Tuesday,…6=Sunday)。

详情请查看连接内该函数的详细介绍。

DAYOFYEAR

语法

DAYOFYEAR(date)

说明

返回 date 是一年中的第几天,范围为 1 到 366。

该函数是MAKEDATE的逆函数。

用例

gbase> select dayofyear('2021-01-01');
+-------------------------+
| dayofyear('2021-01-01') |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select dayofyear('2021-12-31');
+-------------------------+
| dayofyear('2021-12-31') |
+-------------------------+
|                     365 |
+-------------------------+
1 row in set (Elapsed: 00:00:00.00)

MAKEDATE

语法

MAKEDATE(year,dayofyear)

说明

给出年份值 year 和一年中的天数值 dayofyear,返回日期值。天数转日期。
dayofyear 必须大于 0,否则返回 NULL。

样例

gbase> select makedate(2021,32);
+-------------------+
| makedate(2021,32) |
+-------------------+
| 2021-02-01        |
+-------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select makedate(2021,365);
+--------------------+
| makedate(2021,365) |
+--------------------+
| 2021-12-31         |
+--------------------+
1 row in set (Elapsed: 00:00:00.00)

FROM_DAYS

语法

FROM_DAYS(N)

说明

返回天数 N 对应的 DATE 值。

该函数是to_days的逆函数。

样例

其中的数字,请参考后面的to_days函数。

gbase> select @d,from_days(738156);
+------------+-------------------+
| @d         | from_days(738156) |
+------------+-------------------+
| 2021-01-01 | 2021-01-01        |
+------------+-------------------+
1 row in set (Elapsed: 00:00:00.00)

极限数字是366,再小就返回null。

gbase> select from_days(366);
+----------------+
| from_days(366) |
+----------------+
| 0001-01-01     |
+----------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select from_days(365);
+----------------+
| from_days(365) |
+----------------+
| NULL           |
+----------------+
1 row in set (Elapsed: 00:00:00.00)

TO_DAYS

语法

TO_DAYS(date)

说明

返回日期 date 对应的天数(从年份 0 开始的天数)。

该函数时from_days的逆函数。

TO_DAYS()不用于阳历(1582)前的值,原因是当日历改变时,遗失的日期不会被
考虑在内。

用例

正常日期

gbase> select to_days('2020-01-01');
+-----------------------+
| to_days('2020-01-01') |
+-----------------------+
|                737790 |
+-----------------------+
1 row in set (Elapsed: 00:00:00.00)

支持2位数的年份

默认是当前世纪。

gbase> select to_days('20-01-01');
+---------------------+
| to_days('20-01-01') |
+---------------------+
|              737790 |
+---------------------+
1 row in set (Elapsed: 00:00:00.00)

支持紧凑年月日写法

gbase> select to_days('20200101');
+---------------------+
| to_days('20200101') |
+---------------------+
|              737790 |
+---------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select to_days('200101');
+-------------------+
| to_days('200101') |
+-------------------+
|            737790 |
+-------------------+
1 row in set (Elapsed: 00:00:00.00)

极限最低年份

0001-01-01是最低年份,不能用0000年。

gbase> select to_days('0000-12-01');
+-----------------------+
| to_days('0000-12-01') |
+-----------------------+
|                  NULL |
+-----------------------+
1 row in set, 1 warning (Elapsed: 00:00:00.00)

gbase> select to_days('0001-01-01');
+-----------------------+
| to_days('0001-01-01') |
+-----------------------+
|                   366 |
+-----------------------+
1 row in set (Elapsed: 00:00:00.00)

LAST_DAY

语法

LAST_DAY(date)

说明

返回 date 所在月最后一天的值。其中,date 为日期或日期时间类型。如
果参数 date 无效,则返回 NULL。

用例

自动计算当前日期所在月,最后一天的日期。支持闰年。

gbase> select last_day('2021-01-01');
+------------------------+
| last_day('2021-01-01') |
+------------------------+
| 2021-01-31             |
+------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select last_day('2021-02-02');
+------------------------+
| last_day('2021-02-02') |
+------------------------+
| 2021-02-28             |
+------------------------+
1 row in set (Elapsed: 00:00:00.01)

如果是非法日期,则返回NULL。

gbase> select dayofyear('20210-01-01');
+--------------------------+
| dayofyear('20210-01-01') |
+--------------------------+
|                     NULL |
+--------------------------+
1 row in set, 1 warning (Elapsed: 00:00:00.00)

gbase> show warnings;
+---------+------+-----------------------------------------+
| Level   | Code | Message                                 |
+---------+------+-----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '20210-01-01' |
+---------+------+-----------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

参考

GBase 8a字符串和日期函数汇总列表