本文汇总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)