GaussDB-GaussDB-时间和日期处理函数和操作符
时间日期操作符
时间日期操作符如表1所示。
用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。
比如下面示例没有明确数据类型就会出现异常错误。
| ``` gaussdb=# SELECT date '2001-10-01' - '7' AS RESULT; ERROR: GAUSS-10416: invalid input syntax for type timestamp: "7" SQLSTATE: 22007 LINE 1: SELECT date '2001-10-01' - '7' AS RESULT; ^ CONTEXT: referenced column: result
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
[]()[]()
| 操作符 | 示例 |
| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| + | | ```
gaussdb=# SELECT date '2001-9-28' + integer '7' AS RESULT; result ------------ 2001-10-05 (1 row)
``` |
| -------------------------------------------------------------------------------------------------------------- |说明:- 在MYSQL兼容模式下,查询结果为2001-10-05。
- 在ORA兼容模式下,查询结果为2001-10-05 00:00:00。 |
| | ```
gaussdb=# SELECT date '2001-09-28' + interval '1 hour' AS RESULT; result --------------------- 2001-09-28 01:00:00 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT date '2001-09-28' + time '03:00' AS RESULT; result --------------------- 2001-09-28 03:00:00 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT interval '1 day' + interval '1 hour' AS RESULT; result ---------------- 1 day 01:00:00 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT timestamp '2001-09-28 01:00' + interval '23 hours' AS RESULT; result --------------------- 2001-09-29 00:00:00 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT time '01:00' + interval '3 hours' AS RESULT; result ---------- 04:00:00 (1 row)
``` |
| -------------------------------------------------------------------------------------------------------------- | | |
| - | | ```
gaussdb=# SELECT date '2001-10-01' - date '2001-09-28' AS RESULT; result -------- 3 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------- | |
| | ```
gaussdb=# SELECT date '2001-10-01' - integer '7' AS RESULT; result --------------------- 2001-09-24 00:00:00 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT date '2001-09-28' - interval '1 hour' AS RESULT; result --------------------- 2001-09-27 23:00:00 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT time '05:00' - time '03:00' AS RESULT; result ---------- 02:00:00 (1 row)
``` |
| -------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT time '05:00' - interval '2 hours' AS RESULT; result ---------- 03:00:00 (1 row)
``` |
| -------------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT timestamp '2001-09-28 23:00' - interval '23 hours' AS RESULT; result --------------------- 2001-09-28 00:00:00 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT interval '1 day' - interval '1 hour' AS RESULT; result ---------- 23:00:00 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' AS RESULT; result ---------------- 1 day 15:00:00 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | |
| * | | ```
gaussdb=# SELECT 900 * interval '1 second' AS RESULT; result ---------- 00:15:00 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------ | |
| | ```
gaussdb=# SELECT 21 * interval '1 day' AS RESULT; result --------- 21 days (1 row)
``` |
| ----------------------------------------------------------------------------------------------- | | |
| | ```
gaussdb=# SELECT double precision '3.5' * interval '1 hour' AS RESULT; result ---------- 03:30:00 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------------------- | | |
| / | | ```
gaussdb=# SELECT interval '1 hour' / double precision '1.5' AS RESULT; result ---------- 00:40:00 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------------------- | |
#### 时间/日期函数
- age(timestamp, timestamp)
[]()[]()描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负,入参可以都带timezone或都不带timezone。
返回值类型:interval
示例:
| ```
gaussdb=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13'); age ------------------------- 43 years 9 mons 27 days (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- age(timestamp)
[]()[]()描述:当前SQL执行开始时刻的系统时间和参数相减,入参可以带或者不带timezone。
返回值类型:interval
示例:
| ```
gaussdb=# SELECT age(timestamp '1957-06-13'); age ------------------------- 60 years 2 mons 18 days (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------- |
- clock_timestamp()
[]()[]()描述:返回当前函数被调用时的系统时间的时间戳。volatile函数,每次扫描都会取最新的时间戳,因此在一次查询中每次调用结果不相同。
返回值类型:timestamp with time zone
示例:
| ```
gaussdb=# SELECT clock_timestamp(); clock_timestamp ------------------------------- 2017-09-01 16:57:36.636205+08 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------- |
- current_date
[]()[]()描述:返回当前本条SQL启动的系统时间的日期。
返回值类型:date
示例:
| ```
gaussdb=# SELECT current_date; date ------------ 2017-09-01 (1 row) -- ORA兼容模式下,打开GUC参数a_format_date_timestamp时 gaussdb=# SET a_format_date_timestamp=on; SET gaussdb=# SELECT current_date; current_date --------------------- 2023-11-24 11:25:09 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

- 该函数在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下有如下行为:
- 返回当前本条SQL启动的系统时间的时间戳。
- 返回值类型为timestamp without time zone,保留到秒,列名为current_date。
- 参数a_format_version值为10c和a_format_dev_version值为s2的情况下返回值类型为timestamp。
- 关闭GUC参数a_format_date_timestamp,返回的结果为事务开启的系统时间的日期。
- 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有如下行为:
- current_date支持带括号调用。
- current_date实际调用的函数为curdate,可以用“\df curdate”指令查询函数详细入参和返回值。
- current_time()
[]()[]()描述:当前事务的开始时刻的系统时间。在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,返回当前本条SQL执行开始时刻的系统时间。
返回值类型:time with time zone,在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,类型是time without time zone。
示例:
| ```
gaussdb=# SELECT current_time; timetz -------------------- 16:58:07.086215+08 (1 row) --MYSQL模式下打开参数时 gaussdb_m=# SELECT current_time; current_time -------------- 15:14:00 (1 row)
``` |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- current_time([precision])
[]()[]()描述:返回当前本条SQL执行开始时刻的系统时间。
参数:表示精度(秒后小数位数),int类型,范围为[0,6],缺省时默认值为0,无效精度值都报错。
返回值类型:time without time zone
实现方式:映射成系统函数curtime。
示例:
```
gaussdb_m=# SELECT current_time();
current_time
--------------
15:14:05
(1 row)
gaussdb_m=# SELECT current_time(3);
current_time
--------------
15:14:08.433
(1 row)
```

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。curent_time实际调用的函数为curtime,可以用“\df curtime”指令查询函数详细入参和返回值。
- current_timestamp
[]()[]()描述:当前日期及时间。语句级别时间,同一个语句内返回结果不变。
返回值类型:MYSQL模式库中的5.7版本下(sql_compatibility = 'MYSQL'、b_format_version='5.7'、b_format_dev_version='s1')返回类型为timestamp without time zone,其他场景下返回类型为timestamp with time zone。
示例:
| ```
gaussdb=# SELECT current_timestamp; pg_systimestamp ------------------------------ 2017-09-01 16:58:19.22173+08 (1 row) -- MYSQL模式库中的5.7版本下 gaussdb_m=# SELECT current_timestamp; timestamp --------------------- 2023-08-21 15:08:24 (1 row) -- ORA模式下,打开GUC参数a_format_date_timestamp时 gaussdb=# SET a_format_date_timestamp=on; SET gaussdb=# SELECT current_timestamp; current_timestamp ------------------------------- 2023-11-24 11:31:04.895312+08 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

该函数在sql_compatibility = 'ORA'且GUC参数a_format_date_timestamp值为on的情况下有如下行为:
- 返回的结果为当前本条SQL启动的系统时间的时间戳。
- 返回值类型为timestamp with time zone,列名为current_timestamp。
- 关闭GUC参数a_format_date_timestamp,返回结果为系统时间。
该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有如下行为:
- 返回类型为timestamp without time zone。
- 返回结果的精度为0。
- 返回的结果为当前本条sql启动的系统时间的时间戳。
- 该函数通过TYPE转化实现,无实际注册函数,因此通过gsql工具的\df+等相关命令查看的为其他兼容模式下的函数信息,而不是MYSQL兼容模式5.7版本中的函数信息。
- current_timestamp()
[]()[]()描述:返回的结果为当前SQL启动的系统时间。
返回值类型:timestamp without time zone
示例:
| ```
gaussdb=# SELECT current_timestamp(); timestamp --------------------- 2023-08-21 14:34:30 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------------- |

该函数仅支持在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时使用,且有如下行为:
- 返回类型为timestamp without time zone。
- 返回结果的精度为0。
- 返回的结果为当前本条SQL启动的系统时间的时间戳。
- 该函数通过TYPE转化实现,无实际注册函数,因此通过gsql工具的\df+等相关命令查看的为其他模式下的函数信息,而不是MYSQL兼容模式的5.7版本中的函数信息。
- current_timestamp(precision)
[]()[]()描述:当前日期及时间,并将结果的微秒圆整为指定小数位。
参数:表示精度(秒后小数位数),int类型,范围为[0,6],缺省时默认值为0,超过6的整型值告警,并取最大值6输出带精度时间值,其他无效值都报错。
返回值类型:MYSQL模式库中的5.7版本下(sql_compatibility = 'MYSQL'、b_format_version='5.7'、b_format_dev_version='s1')返回类型为timestamp without time zone,其他场景下返回类型为timestamp with time zone。
示例:
| ```
gaussdb=# SELECT current_timestamp(1); timestamptz ------------------------------ 2017-09-01 16:58:19.2+08 (1 row) -- MYSQL模式库中的5.7版本下 gaussdb_m=# SELECT current_timestamp(1); timestamp ----------------------- 2023-08-21 15:09:35.3 (1 row) -- ORA模式下打开GUC参数a_format_date_timestamp时 gaussdb=# SET a_format_date_timestamp=on; SET gaussdb=# SELECT current_timestamp(6); current_timestamp ------------------------------- 2023-11-24 11:35:57.268592+08 (1 row) -- 在ORA兼容模式数据库中且参数a_format_version值为10c、a_format_dev_version值为s2的情况下,precision参数支持numeric类型的整值 gaussdb=# SET a_format_version='10c'; SET gaussdb=# SET a_format_dev_version='s2'; SET gaussdb=# SELECT current_timestamp(6.0); current_timestamp ------------------------------ 2023-11-25 11:14:48.74763+08 (1 row)
``` |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

- 微秒末位的0不显示,如2017-09-01 10:32:19.212000输出显示为2017-09-01 10:32:19.212。
- 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有如下行为:
- 返回类型为timestamp without time zone。
- 返回的结果为当前本条SQL启动的系统时间的时间戳。
- 该函数通过TYPE转化实现,无实际注册函数,因此通过gsql工具的\df+等相关命令查看的为其他模式下的函数信息,而不是MYSQL兼容模式的5.7版本中的函数信息。
- 该函数在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下有如下行为:
- 返回值类型为timestamp with time zone,列名为current_timestamp。
- 返回的结果为当前本条SQL启动的系统时间的时间戳。
- 当参数a_format_version值为10c、a_format_dev_version值为s2时,precision参数支持numeric类型的整值,否则仅支持int输入。
- 关闭GUC参数a_format_date_timestamp,当入参为不带小数点的整值时,返回的结果为事务开启的系统的日期和时间;当入参为带小数点的整值时,返回结果为系统时间。
- pg_systimestamp()
[]()[]()描述:当前日期和时间(当前语句的开始)。
返回值类型:timestamp with time zone
示例:
| ```
gaussdb=# SELECT pg_systimestamp(); pg_systimestamp ------------------------------- 2015-10-14 11:21:28.317367+08 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------- |
- date_part(text, timestamp)
[]()[]()描述:
获取日期或者时间值中子域的值,例如年或者小时的值。
等效于extract(field from timestamp)。
timestamp类型:abstime、date、interval、reltime、time with time zone、time without time zone、timestamp with time zone、timestamp without time zone。
返回值类型:double precision
示例:
| ```
gaussdb=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40'); date_part ----------- 20 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------ |
- date_part(text, interval)
[]()[]()描述:获取月份的值。如果大于12,则取与12的模。等效于extract(field from timestamp)。
返回值类型:double precision
示例:
| ```
gaussdb=# SELECT date_part('month', interval '2 years 3 months'); date_part ----------- 3 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------- |
- date_trunc(text, timestamp)
[]()[]()描述:截取到参数text指定的精度。
返回值类型:interval、timestamp with time zone、timestamp without time zone
示例:
| ```
gaussdb=# SELECT date_trunc('hour', timestamp '2001-02-16 20:38:40'); date_trunc --------------------- 2001-02-16 20:00:00 (1 row)
``` |
| -------------------------------------------------------------------------------------------------------------------------------------------------------- |
- trunc(timestamp)
[]()[]()描述:默认按天截取。
示例:
| ```
gaussdb=# SELECT trunc(timestamp '2001-02-16 20:38:40'); trunc --------------------- 2001-02-16 00:00:00 (1 row)
``` |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- trunc(arg1, arg2)
[]()[]()描述:截取到arg2指定的精度。
- arg1类型:interval、timestamp with time zone、timestamp without time zone
- arg2类型:text
返回值类型:interval、timestamp with time zone、timestamp without time zone
示例:
| ```
gaussdb=# SELECT trunc(timestamp '2001-02-16 20:38:40', 'hour'); trunc --------------------- 2001-02-16 20:00:00 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- round(arg1, arg2)
[]()[]()描述:四舍五入到arg2指定的精度。
arg1类型:timestamp without time zone
arg2类型:text
返回值类型:timestamp without time zone
示例:
| ```
gaussdb=# SELECT round(timestamp '2001-02-16 20:38:40', 'hour'); round --------------------- 2001-02-16 21:00:00 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。
- daterange(arg1, arg2)
[]()[]()描述:获取时间边界信息。
arg1类型:date
arg2类型:date
返回值类型:daterange
示例:
| ```
gaussdb=# SELECT daterange('2000-05-06','2000-08-08'); daterange ------------------------- [2000-05-06,2000-08-08) (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------- |
- daterange(arg1, arg2, text)
[]()[]()描述:获取时间边界信息。
arg1类型:date
arg2类型:date
text类型:text
返回值类型:daterange
示例:
| ```
gaussdb=# SELECT daterange('2000-05-06','2000-08-08','[]'); daterange ------------------------- [2000-05-06,2000-08-09) (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------- |
- isfinite(date)
[]()[]()描述:判断日期是否为有限值,是则返回t,否则返回f。
返回值类型:Boolean
示例:
| ```
gaussdb=# SELECT isfinite(date '2001-02-16'); isfinite ---------- t (1 row) gaussdb=# SELECT isfinite(date 'infinity'); isfinite ---------- f (1 row)
``` |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- isfinite(timestamp)
[]()[]()描述:判断时间戳是否为有限值,是则返回t,否则返回f。
返回值类型:Boolean
示例:
| ```
gaussdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30'); isfinite ---------- t (1 row) gaussdb=# SELECT isfinite(timestamp 'infinity'); isfinite ---------- f (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- isfinite(interval)
[]()[]()描述:判断时间间隔是否为有限值,是则返回t,暂不支持返回f,输入'infinity'会报错。
返回值类型:Boolean
示例:
| ```
gaussdb=# SELECT isfinite(interval '4 hours'); isfinite ---------- t (1 row)
``` |
| ---------------------------------------------------------------------------------------- |
- justify_days(interval)
[]()[]()描述:将时间间隔以月(30天为一月)为单位。
返回值类型:interval
示例:
| ```
gaussdb=# SELECT justify_days(interval '35 days'); justify_days -------------- 1 mon 5 days (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------- |
- justify_hours(interval)
[]()[]()描述:将时间间隔以天(24小时为一天)为单位。
返回值类型:interval
示例:
| ```
gaussdb=# SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS'); justify_hours ---------------- 1 day 03:00:00 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------------------- |
- justify_interval(interval)
[]()[]()描述:结合justify_days和justify_hours,调整interval。
返回值类型:interval
示例:
| ```
gaussdb=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR'); justify_interval ------------------ 29 days 23:00:00 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------- |
- localtime()
[]()[]()描述:当前事务的开始时刻的系统时间。在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回当前本条SQL执行开始时刻的系统日期和时间。
返回值类型:time,在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回类型timestamp without time zone。
示例:
| ```
gaussdb=# SELECT localtime AS RESULT; result ---------------- 16:05:55.664681 (1 row) -- MYSQL模式,打开兼容性参数后 gaussdb_m=# select localtime; localtime --------------------- 2023-08-21 15:21:57 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- localtime[([precision])]
[]()[]()描述:返回当前本条SQL执行开始时刻的系统日期和时间。
参数:表示精度(秒后小数位数),int类型,范围为[0,6],缺省时默认值为0,无效值都报错。
返回值类型:timestamp without time zone
实现方式:注册系统函数localtime。
示例:
| ```
gaussdb_m=# SELECT localtime(); localtime --------------------- 2023-08-21 15:23:49 (1 row) gaussdb_m=# SELECT localtime(3); localtime ------------------------- 2023-08-21 15:23:51.965 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
- localtimestamp
[]()[]()描述:当前日期及时间。
返回值类型:timestamp
示例:
| ```
gaussdb=# SELECT localtimestamp; timestamp ---------------------------- 2017-09-01 17:03:30.781902 (1 row) -- MYSQL兼容模式下,打开兼容性参数 gaussdb_m=# SELECT localtimestamp; timestamp --------------------- 2023-08-21 15:27:55 (1 row) -- ORA兼容模式下打开GUC参数a_format_date_timestamp时 gaussdb=# SET a_format_date_timestamp=on; SET gaussdb=# SELECT localtimestamp; localtimestamp ---------------------------- 2023-11-24 11:38:25.633231 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有如下行为:
- 返回当前本条SQL执行开始时刻的系统日期和时间。
- 返回类型timestamp without time zone,列名为timestamp
该函数在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下有如下行为:
- 返回值类型为timestamp without time zone,列名为localtimestamp。
- 返回的结果为当前本条SQL启动的系统时间的时间戳。
- 关闭GUC参数a_format_date_timestamp,返回的结果为事务开启的系统的日期和时间。
- localtimestamp[([precision])]
[]()[]()描述:当前日期及时间。
参数:表示精度(秒后小数位数),int类型,范围为[0,6],缺省时默认值为0,超过6的整型值告警,并取最大值6输出带精度时间值,其他无效值都报错。
返回值类型:timestamp without time zone
示例:
| ```
-- 带括号且无入参调用仅在MYSQL兼容模式下支持 gaussdb_m=# SELECT localtimestamp(); timestamp --------------------- 2023-08-21 15:27:59 (1 row) gaussdb_m=# SELECT localtimestamp(3); timestamp ------------------------- 2023-08-21 15:28:02.445 (1 row) -- ORA兼容模式下,打开GUC参数a_format_date_timestamp时 gaussdb=# SET a_format_date_timestamp=on; SET gaussdb=# SELECT localtimestamp(6); localtimestamp ---------------------------- 2023-11-24 11:41:14.086227 (1 row) -- 在ORA兼容模式数据库中且参数a_format_version值为10c、a_format_dev_version值为s2的情况下,precision参数支持numeric类型的整值 gaussdb=# SET a_format_version='10c'; SET gaussdb=# SET a_format_dev_version='s2'; SET gaussdb=# SELECT localtimestamp(6.0); localtimestamp ---------------------------- 2023-11-24 11:42:45.642167 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

- 微秒末位的0不显示,如2017-09-01 10:32:19.212000输出显示为2017-09-01 10:32:19.212。
- 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,返回当前本条SQL执行开始时刻的系统日期和时间,支持带括号且无入参调用。
- 该函数在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下,有以下行为:
- 返回当前本条SQL启动的系统时间的时间戳。
- 返回值类型为timestamp without time zone,列名为localtimestamp。
- 当参数a_format_version值为10c、a_format_dev_version值为s2时,precision参数支持numeric类型的整值,否则仅支持int输入。
- 关闭GUC参数a_format_date_timestamp,返回的结果为事务开启的系统的日期和时间。
- maketime(hour, minute, second)
[]()[]()描述:通过入参hour、minute、second生成对应time类型时间,其中三个入参类型分别为bigint、bigint和numeric。
返回值类型:time
示例:
| ```
gaussdb=# SELECT maketime(8, 15, 26.53); maketime ------------- 08:15:26.53 (1 row) gaussdb=# SELECT maketime(-888, 15, 26.53); maketime ------------ -838:59:59 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

该函数仅支持sql_compatibility = 'MYSQL',GUC参数b_format_version='5.7'、b_format_dev_version='s1'时使用,且有如下行为:
- 当参数满足如下任一条件时,函数返回NULL。
- 入参minute < 0 或 minute >= 60。
- 入参second < 0 或 second >= 60。
- 任一参数为NULL。
- 返回的time类型结果保留6位小数,若second超出六位小数,则按照四舍五入进位。
- 返回time类型值要求在[-838:59:59, 838:59:59]中。若超出范围,则根据hour的正负来返回指定的边界值。
- maketime不支持自嵌套。
- now()
[]()[]()描述:当前事务的开始时刻的系统的日期及时间,同一个事务内返回结果相同。仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回当前本条SQL执行开始时刻的系统日期和时间。
返回值类型:timestamp with time zone,在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回类型timestamp without time zone
示例:
| ```
gaussdb=# SELECT now(); now ------------------------------- 2017-09-01 17:03:42.549426+08 (1 row) --MYSQL模式下,打开兼容性参数 gaussdb_m=# SELECT now(); timestamp --------------------- 2023-08-21 17:17:42 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- now(precision)
[]()[]()描述:返回当前本条SQL执行开始时刻的系统日期和时间。
参数:表示精度(秒后小数位数),int类型,范围为[0,6],缺省时默认值为0,超过6的整型值告警,并取最大值6输出带精度时间值,其他无效值都报错。
返回值类型:timestamp without time zone
实现方式:'now' :: text :: timestamp without time zone表达式获取。
示例:
| ```
gaussdb_m=# SELECT now(3); timestamp ------------------------- 2023-08-21 17:17:48.819 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------ |

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
- timenow()
[]()[]()描述:返回当前本条SQL执行开始时刻的系统日期和时间。
返回值类型:abstime
示例:
| ```
gaussdb=# SELECT timenow(); timenow ------------------------ 2020-06-23 20:36:56+08 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------- |
- dbtimezone
[]()[]()描述:当前数据库的时区。
返回值类型:text
示例:
| ```
gaussdb=# SELECT dbtimezone; dbtimezone ------------------------ PRC (1 row)
``` |
| ---------------------------------------------------------------------------------------------- |

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。
- numtodsinterval(num, interval_unit)
[]()[]()描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。
可以通过设置GUC参数IntervalStyle为ORA,兼容该函数interval输出格式。
返回值类型:interval
示例:
| ```
gaussdb=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ----------------- 100:00:00 (1 row) gaussdb=# SET intervalstyle = oracle; SET gaussdb=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ------------------------------- +000000004 04:00:00.000000000 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下:当参数interval_unit为 'DAY' 时,参数num超过1000000000会报错。
- numtoyminterval(num, interval_unit)
[]()[]()描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('YEAR' | 'MONTH')。
可以通过设置GUC参数IntervalStyle为ORA,兼容该函数interval输出格式。
返回值类型:interval
示例:
| ```
gaussdb=# SELECT numtoyminterval(100, 'MONTH'); numtoyminterval ----------------- 8 years 4 mons (1 row) gaussdb=# SET intervalstyle = oracle; SET gaussdb=# SELECT numtodsinterval(100, 'MONTH'); numtoyminterval ----------------- 8-4 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。
- new_time(date, timezone1,timezone2)
[]()[]()描述:当timezone1所表示时区的日期时间为date的时候,返回此时timezone2所表示时区的日期时间值。
返回值类型:timestamp
示例:
| ```
gaussdb=# SELECT new_time('1997-10-10','AST','EST'); new_time --------------------- 1997-10-09 23:00:00 (1 row) gaussdb=# SELECT NEW_TIME(TO_TIMESTAMP ('10-Sep-02 14:10:10.123000','DD-Mon-RR HH24:MI:SS.FF'), 'AST', 'PST'); new_time ------------------------- 2002-09-10 10:10:10.123 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
- sessiontimezone()
[]()[]()描述:当前会话的时区,无入参。
返回值类型:text
示例:
| ```
gaussdb=# SELECT SESSIONTIMEZONE; session_time_zone ------------------- PST8PDT (1 row) gaussdb=# SELECT LOWER(SESSIONTIMEZONE); lower ----------- @ 8 hours (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
当set session time zone的值为GMT+08:00/GMT-08:00格式时,会校验失败报错,此行为符合预期。如果打开s2开关后,使用JDBC创建连接时报“ERROR:invalid value for parameter "TimeZone" :"GMT-08:00"”的错误时,这说明驱动所在的应用给GaussDB数据库传递了相同的GMT格式的时区参数,可以通过如下两种方法解决:
方法1: 调整应用端操作系统时区,将本地时区设置成地区格式,例如:Asia/Shanghai。
方法2:应用侧更换为和版本匹配的JDBC驱动,JDBC驱动会将GMT格式的时区调整为数据库可识别的时区格式。
- sys_extract_utc(timestamp| timestamptz)
[]()[]()描述:从具有时区偏移量或时区区域名称的日期时间值中提取UTC(协调世界时-以前称为格林威治平均时间)。如果未指定时区,则日期时间与会话时区关联。入参有timestamp和timestamptz两种形式。
返回值类型:timestamp
示例:
| ```
gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00'); sys_extract_utc --------------------- 2000-03-28 03:30:00 (1 row) gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMPTZ '2000-03-28 11:30:00.00 -08:00'); sys_extract_utc --------------------- 2000-03-28 19:30:00 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
- tz_offset('time_zone_name' | '(+/-)hh:mi' | SESSIONTIMEZONE | DBTIMEZONE)
[]()[]()描述:入参有以上四种形式,返回入参所表示时区的UTC偏移量。
返回值类型:text
示例:
| ```
gaussdb=# SELECT TZ_OFFSET('US/Pacific'); tz_offset ----------- -08:00 (1 row) gaussdb=# SELECT TZ_OFFSET(sessiontimezone); tz_offset ----------- +08:00 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
- pg_sleep(seconds)
[]()[]()描述:服务器线程延迟时间,单位为秒。注意,当数据库调用该函数时,会获取相应的事务快照,相当于一个长事务,如果入参时间过长可能导致数据库oldestxmin无法推进,影响表的回收和查询性能。
返回值类型:void
示例:
| ```
gaussdb=# SELECT pg_sleep(10); pg_sleep ---------- (1 row)
``` |
| ---------------------------------------------------------------------- |
- statement_timestamp()
[]()[]()描述:当前日期和时间(当前语句的开始)。
返回值类型:timestamp with time zone
示例:
| ```
gaussdb=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2017-09-01 17:04:39.119267+08 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------- |
- sysdate
[]()[]()描述:返回当前本条SQL执行时刻的系统日期和时间。
返回值类型:timestamp
示例:
| ```
gaussdb=# SELECT sysdate; sysdate --------------------- 2017-09-01 17:04:49 (1 row)
``` |
| ----------------------------------------------------------------------------------------------------------- |
- sysdate([precision])
[]()[]()描述:返回函数执行时刻的系统日期和时间。
参数:表示时间精度,int类型,范围为[0,6],缺省时默认值为0。
返回值类型:timestamp without time zone
示例:
| ```
gaussdb_m=# SELECT sysdate(); sysdate() --------------------- 2023-08-21 17:17:42 (1 row) gaussdb_m=# SELECT sysdate(3); sysdate(3) ------------------------- 2023-08-21 17:17:48.819 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
- current_sysdate()
[]()[]()描述:返回当前本条SQL执行开始时刻的系统日期和时间。
返回值类型:timestamp
示例:
| ```
gaussdb=# SELECT current_sysdate(); current_sysdate --------------------- 2023-06-20 20:09:02 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------- |
- timeofday()
[]()[]()描述:返回当前函数被调用时的系统时间的时间时间戳(像clock_timestamp,但是返回时为text)。
返回值类型:text
示例:
| ```
gaussdb=# SELECT timeofday(); timeofday ------------------------------------- Fri Sep 01 17:05:01.167506 2017 CST (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- transaction_timestamp()
[]()[]()描述:当前事务开始的系统的日期及时间。
返回值类型:timestamp with time zone,在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回timestamp without time zone。
示例:
| ```
gaussdb=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2017-09-01 17:05:13.534454+08 (1 row) --mysql模式打开兼容性开关 gaussdb=# SELECT transaction_timestamp(); transaction_timestamp ---------------------------- 2023-09-07 09:32:09.728998 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
- add_months(d,n)
[]()[]()描述:用于计算时间点d再加上n个月的时间。
d:timestamp类型的值,以及可以隐式转换为timestamp类型的值。
n:INTEGER类型的值,以及可以隐式转换为INTEGER类型的值。
返回值类型:timestamp
示例:
| ```
gaussdb=# SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy; add_months --------------------- 2018-04-29 00:00:00 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下:
- 当计算结果大于公元9999年时会报错。
- 参数n若入参为小数则不会被四舍五入,而是被截断。
- last_day(d)
[]()[]()描述:用于计算时间点d当月最后一天的时间。
返回值类型:timestamp
示例:
| ```
gaussdb=# SELECT last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result; cal_result --------------------- 2017-01-31 00:00:00 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- |

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,使用last_day函数将会调用内置函数b_db_last_day,入参类型可为TEXT、DATE、DATETIME和TIME数据类型。返回值为date类型,支持输入datetime样式数字。
<!---->
- months_between(d1, d2)
[]()[]()描述:用于计算时间点d1和时间点d2的月份差值,如果两个日期都是月末或天数相同,则返回整数,否则返回值带小数,按31天/月计算。
返回值类型:numeric
示例:
```
gaussdb=# SELECT months_between(to_date('2022-10-31', 'yyyy-mm-dd'), to_date('2022-09-30', 'yyyy-mm-dd'));
months_between
----------------
1
(1 row)
gaussdb=# SELECT months_between(to_date('2022-10-30', 'yyyy-mm-dd'), to_date('2022-09-30', 'yyyy-mm-dd'));
months_between
----------------
1
(1 row)
gaussdb=# SELECT months_between(to_date('2022-10-29', 'yyyy-mm-dd'), to_date('2022-09-30', 'yyyy-mm-dd'));
months_between
-----------------------
.96774193548387096774
(1 row)
```

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。
- next_day(x,y)
[]()[]()描述:用于计算时间点x开始的下一个星期几(y)的时间。
返回值类型:timestamp
示例:
| ```
gaussdb=# SELECT next_day(timestamp '2017-05-25 00:00:00','Sunday')AS cal_result; cal_result --------------------- 2017-05-28 00:00:00 (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
<!---->
- tinterval(abstime, abstime)
[]()[]()描述:用两个绝对时间创建时间间隔。
返回值类型:tinterval
示例:
| ```
gaussdb=# CALL tinterval(abstime 'May 10, 1947 23:59:12', abstime 'Mon May 1 00:30:30 1995'); tinterval ----------------------------------------------------- ["1947-05-10 23:59:12+08" "1995-05-01 00:30:30+08"] (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
<!---->
- tintervalend(tinterval)
[]()[]()描述:返回tinterval的结束时间。
返回值类型:abstime
示例:
| ```
gaussdb=# SELECT tintervalend('["Sep 4, 1983 23:59:12" "Oct4, 1983 23:59:12"]'); tintervalend ------------------------ 1983-10-04 23:59:12+08 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
<!---->
- []()[]()tintervalrel(tinterval)
描述:计算并返回tinterval的相对时间。
返回值类型:reltime
示例:
| ```
gaussdb=# SELECT tintervalrel('["Sep 4, 1983 23:59:12" "Oct4, 1983 23:59:12"]'); tintervalrel -------------- 1 mon (1 row)
``` |
| ------------------------------------------------------------------------------------------------------------------------------------- |
- smalldatetime_ge(smalldatetime, smalldatetime)
[]()[]()描述:判断是否第一个参数大于第二个参数。
参数:smalldatetime, smalldatetime
返回值类型:boolean
- smalldatetime_cmp(smalldatetime, smalldatetime)
[]()[]()描述:对比smalldatetime是否相等。
参数:smalldatetime, smalldatetime
返回值类型:integer
- smalldatetime_eq(smalldatetime, smalldatetime)
[]()[]()描述:对比smalldatetime是否相等。
参数:smalldatetime, smalldatetime
返回值类型:boolean
- smalldatetime_gt(smalldatetime, smalldatetime)
[]()[]()描述:判断是否第一个参数小于第二个参数。
参数:smalldatetime, smalldatetime
返回值类型:boolean
- smalldatetime_hash(smalldatetime)
[]()[]()描述:计算timestamp对应的哈希值。
参数:smalldatetime
返回值类型:integer
- smalldatetime_in(cstring, oid, integer)
[]()[]()描述:输入timestamp。
参数:cstring, oid, integer
返回值类型:smalldatetime
- smalldatetime_larger(smalldatetime, smalldatetime)
[]()[]()描述:返回较大的timestamp。
参数:smalldatetime, smalldatetime
返回值类型:smalldatetime
- smalldatetime_le(smalldatetime, smalldatetime)
[]()[]()描述:判断是否第一个参数小于第二个参数。
参数:smalldatetime, smalldatetime
返回值类型:boolean
- smalldatetime_lt(smalldatetime, smalldatetime)
[]()[]()描述:判断是否第一个参数大于第二个参数。
参数:smalldatetime, smalldatetime
返回值类型:boolean
- smalldatetime_ne(smalldatetime, smalldatetime)
[]()[]()描述:比较两个timestamp是否不相等。
参数:smalldatetime, smalldatetime
返回值类型:boolean
- smalldatetime_out(smalldatetime)
[]()[]()描述:timestamp转换为外部形式。
参数:smalldatetime
返回值类型:cstring
- smalldatetime_send(smalldatetime)
[]()[]()描述:timestamp转换为二进制格式。
参数:smalldatetime
返回值类型:bytea
- smalldatetime_smaller(smalldatetime, smalldatetime)
[]()[]()描述:返回较小的一个smalldatetime。
参数:smalldatetime, smalldatetime
返回值类型:smalldatetime
- smalldatetime_to_abstime(smalldatetime)
[]()[]()描述:smalldatetime转换为abstime。
参数:smalldatetime
返回值类型:abstime
- smalldatetime_to_time(smalldatetime)
[]()[]()描述:smalldatetime转换为time。
参数:smalldatetime
返回值类型:time without time zone
- smalldatetime_to_timestamp(smalldatetime)
[]()[]()描述:smalldatetime转换为timestamp。
参数:smalldatetime
返回值类型:timestamp without time zone
- smalldatetime_to_timestamptz(smalldatetime)
[]()[]()描述:smalldatetime转换为timestamptz。
参数:smalldatetime
返回值类型:timestamp with time zone
- smalldatetime_to_varchar2(smalldatetime)
[]()[]()描述:smalldatetime转换为varchar2。
参数:smalldatetime
返回值类型:character varying

获取当前时间有多种方式,请根据实际业务从场景选择合适的接口:
1. 以下接口按照当前事务的开始时刻返回值:
```
CURRENT_DATE CURRENT_TIME
CURRENT_TIME(precision)
CURRENT_TIMESTAMP(precision)
LOCALTIME
LOCALTIMESTAMP
LOCALTIME(precision)
LOCALTIMESTAMP(precision)
transaction_timestamp()
now()
```
其中CURRENT_TIME和CURRENT_TIMESTAMP(precision)传递带有时区的值;LOCALTIME和LOCALTIMESTAMP传递的值不带时区。CURRENT_TIME、LOCALTIME和LOCALTIMESTAMP可以指定精度参数,这会导致结果在秒字段中四舍五入到小数位数。如果没有精度参数,结果将被给予所能得到的全部精度。
因为这些函数全部都按照当前事务的开始时刻返回结果,所以它们的值在事务运行的整个期间内都不改变。可以认为这是一个特性:目的是为了允许一个事务在“当前”时间上有一致的概念,这样在同一个事务里的多个修改可以保持同样的时间戳。其中transaction_timestamp()等价于CURRENT_TIMESTAMP(precision),表示当前语句所在事务的开启时间。now()等效于transaction_timestamp()。
需要特别注意,当事务开启时,在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下,CURRENT_DATE、CURRENT_TIMESTAMP(precision)、LOCALTIMESTAMP、LOCALTIMESTAMP(precision)函数返回的结果为当前SQL启动的时间戳,关闭GUC参数a_format_date_timestamp,则返回的结果为事务开启日期或日期及时间。
在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时CURDATE、CURRENT_DATE、CURTIME、CURRENT_TIME、CURRENT_TIMESTAMP、NOW、LOCALTIME、LOCALTIMESTAMP、UTC_TIME、UTC_TIMESTAMP都返回SQL语句开始执行的时间,SYSDATE返回函数调用开始的时间。transaction_timestamp()依然表示事务开始时间,返回值类型改为timestamp without time zone。
1. 以下接口返回当前语句开始时间:
```
statement_timestamp()
```
statement_timestamp()返回当前语句的开始时刻(更准确的说是收到客户端最后一条命令的时间)。statement_timestamp()和transaction_timestamp()在一个事务的第一条命令期间返回值相同,但是在随后的命令中却不一定相同。
1. 以下接口返回函数被调用时的真实当前时间:
```
clock_timestamp()
timeofday()
```
clock_timestamp()返回真正的当前时间,因此它的值甚至在同一条SQL 命令中都会变化。timeofday()和clock_timestamp()相似,timeofday()也返回真实的当前时间,但是它的结果是一个格式化的text串,而不是timestamp with time zone值。
<!---->
- convert_tz(dt, from_tz, to_tz)
[]()[]()描述:将时间日期值dt从from_tz时区转换到to_tz时区。
参数:参数介绍如[表2](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0362.html#ZH-CN_TOPIC_0000001865745532__zh-cn_topic_0000001704537309_table169843432320)所示。
[]()[]()
| 参数 | 类型 | 描述 | 取值范围 |
| :------------ | :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- |
| dt | datetime、date、text、numeric类型。 | 时间日期值。 | [0000-01-01 00:00:00.000000, 9999-12-31 23:59:59.999999]。 |
| from_tz/to_tz | ±hh:mm格式的字符串。 | 表示相较于UTC时间的偏移,如'+08:00'。 | [-15:59, 15:00]。 |
| 命名时区。 | 如'MET'、'UTC'等。 | 具体请参考[PG_TIMEZONE_NAMES](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-1309.html#ZH-CN_TOPIC_0000001865746496)系统视图。 | |
返回值类型:datetime
示例:
| ```
gaussdb=# SET b_format_dev_version = 's1'; SET gaussdb=# SET b_format_version = '5.7'; SET gaussdb=# SELECT convert_tz(cast('2023-01-01 10:10:10' as datetime), '+00:00', '+01:00'); convert_tz --------------------- 2023-01-01 11:10:10 (1 row) gaussdb=# SELECT convert_tz(cast('2023-01-01' as date), '+00:00', '+01:00'); convert_tz --------------------- 2023-01-01 01:00:00 (1 row) gaussdb=# SELECT convert_tz('2023-01-01 10:10:10', '+00:00', '+01:00'); convert_tz --------------------- 2023-01-01 11:10:10 (1 row) gaussdb=# SELECT convert_tz('2023-01-01', '+00:00', '+01:00'); convert_tz --------------------- 2023-01-01 01:00:00 (1 row) gaussdb=# SELECT convert_tz(20230101101010, '+00:00', '+01:00'); convert_tz --------------------- 2023-01-01 11:10:10 (1 row) gaussdb=# SELECT convert_tz(20230101, '+00:00', '+01:00'); convert_tz --------------------- 2023-01-01 01:00:00 (1 row) gaussdb=# SELECT convert_tz('2023-01-01 10:10:10', 'UTC', 'PRC'); convert_tz --------------------- 2023-01-01 18:10:10 (1 row)
``` |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
- sec_to_time(seconds)
[]()[]()描述:将seconds表示的秒数转换为time类型的时间。
参数:参数介绍如[表3](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0362.html#ZH-CN_TOPIC_0000001865745532__zh-cn_topic_0000001704537309_table831121810567)所示。
[]()[]()
| 参数 | 类型 | 描述 | 取值范围 |
| :------ | :-------------- | :-- | :---------------------------------------------------------------------- |
| seconds | numeric、text类型。 | 秒数。 | [-3020399, +3020399],对应time类型范围[-838:59:59, 838:59:59],对于越界输入会截断到边界值。 |
返回值类型:time without time zone
示例:
| ```
gaussdb=# SET b_format_dev_version = 's1'; SET gaussdb=# SET b_format_version = '5.7'; SET gaussdb=# SELECT sec_to_time(2000); sec_to_time ------------- 00:33:20 (1 row) gaussdb=# SELECT sec_to_time('-2000'); sec_to_time ------------- -00:33:20 (1 row)
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
<!---->
- []()[]()adddate(date, INTERVAL val unit)
描述:将日期加上一定的时间间隔,返回一个新的日期。
参数:参数介绍如[表4](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0362.html#ZH-CN_TOPIC_0000001865745532__zh-cn_topic_0000001704537309_table8793115711268)所示。
[]()[]()
| 参数 | 类型 | 描述 | 取值范围 |
| :--- | :--------------------------------- | :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| date | 时间类型表达式、text、datetime、date或time等类型 | 要加上时间间隔的日期。 | 和类型范围一致。 |
| val | 整数、浮点数、字符串等类型 | 要加上的时间间隔。 | 和类型范围一致。 |
| unit | 关键字 | 时间间隔的单位。 | YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MICROSECOND等,具体请参见[时间间隔表达式](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0423.html#ZH-CN_TOPIC_0000001911666933)。 |
返回值类型:TEXT、DATE、DATETIME或TIME WITHOUT TIMEZONE。
示例:
| ```
gaussdb=# SELECT ADDDATE('2018-05-01', INTERVAL 1 DAY); adddate ------------ 2018-05-02 (1 row)
``` |
| -------------------------------------------------------------------------------------------------------------- |

1. 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
1. 在prepare语句中,adddate的第二个参数为interval表达式,当使用参数$1完全替代时,会导致结果非预期,例如:prepare p1 as select adddate('2023-01-01 10:00:00', $1); execute p1(interval 13 hour);该用例返回非预期结果为'2023-01-01 10:00:00'。
- adddate(expr, days)
[]()[]()描述:将日期加上一定的天数值,返回一个新的日期。
参数:
- expr:指定开始的日期时间,时间类型表达式,TEXT、DATE、DATETIME或TIME等类型。
- days:需要加上的天数,int类型。
返回值类型:TEXT、DATE、DATETIME或TIME WITHOUT TIMEZONE
示例:
```
gaussdb=# SELECT ADDDATE('2018-05-01', 1);
adddate
------------
2018-05-02
(1 row)
```

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
更多详情请参考GaussDB 文档中心:<https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/productdesc/qlh_03_0001.html>