本文为您介绍Hologres支持的时间和日期函数及使用示例。
| 类型 | 函数 | 功能 | 
| 类型转换函数 | 使用年、月、日创建日期,默认支持的时间范围为1925~2282年。 | |
| 将时间戳、整数、实数和双精度数转换为字符串。 | ||
| 将字符串转换为日期,默认支持的时间范围为1925~2282年。 | ||
| 将字符串转换为时间戳或将时间戳转换为日期。 | ||
| 时间日期加减乘除函数 | 为指定日期增加月份。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 | |
| 根据指定的单位和数值,进行日期的增减运算,默认支持的时间范围为1925~2282年。 | ||
| 计算两个日期或时间戳之间的时间差,默认支持的时间范围为1925~2282年。 | ||
| 计算两个日期之间相差的月数。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 | ||
| 计算指定日期后的下一个特定星期几所在的日期。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 | ||
| 将时间日期相加。 | ||
| 将时间日期相减。 | ||
| 将时间日期相乘。 | ||
| 将时间日期相除。 | ||
| 时间日期截取函数 | 从一个日期时间表达式(TIMESTAMP)中提取特定的部分(比如年、月、日、小时等),等效于EXTRACT函数。 | |
| 将时间日期数据截断到指定的时间单位。 | ||
| 从一个日期时间表达式(TIMESTAMP)中提取特定的部分(比如年、月、日、小时等)。 | ||
| 获取指定日期所在月份的最后一天日期,默认支持的时间范围为1925~2282年。 | ||
| 获取指定日期所在月份的最后一天日期,默认支持的时间范围为1925~2282年。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 | ||
| 把日期时间圆整到最近的时间单位。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 | ||
| 将日期或时间戳截断到指定的时间单位。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 | ||
| 获取当前时间日期函数 | 获取当前时刻。 | |
| 获取当前日期。 | ||
| 获取当前事务的开始时刻,等效于TRANSACTION_TIMESTAMP和NOW。 | ||
| 获取不包含时区的当前时间。 | ||
| 获取当前事务的开始时刻,等效于TRANSACTION_TIMESTAMP和CURRENT_TIMESTAMP。 | ||
| 获取当前语句的开始时刻。 | ||
| 获取当前时刻,类似于CLOCK_TIMESTAMP。但TIMEOFDAY函数返回的时间是以格式化文本字符串的形式呈现。 | ||
| 获取当前事务的开始时刻,等效于CURRENT_TIMESTAMP和NOW。 | ||
| 其他 | 判断DATE类型的日期是否为有限值,即非无穷大或非无穷小。 | 
日期时间转换函数
TO_CHAR
- 描述 - 将时间戳转换为字符串,默认支持的时间范围为1925~2282年。 - TO_CHAR(TIMESTAMP|TIMESTAMPTZ, TEXT)- 使用说明: - 支持24小时制和12小时制的转换。其中,HH24对应24小时制,HH12对应12小时制,默认为12小时制。 
- YYYY对应年,- MM对应月,- DD对应日,- HH对应时,- MI对应分,- SS对应秒。
- 自Hologres V1.1.31版本开始,在SQL前执行 - set hg_experimental_functions_use_pg_implementation = 'to_char';或者- set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';可支持所有时间。说明- 使用该GUC参数后,查询性能约有50%的损失,升级至Hologres V1.1.42及以上版本后,约有20%的损失。 
 
- 将整数转换为字符串。 - TO_CHAR(INT, TEXT)
- 将实数和双精度数转换为字符串。 - TO_CHAR(DOUBLE PRECISION, TEXT)
 
- 返回值说明 - 返回TEXT类型。 
- 示例 - 将时间戳转换为24小时制。 - --返回结果:13:48:30 SELECT TO_CHAR(current_timestamp, 'HH24:MI:SS'); --返回结果:2024-08-05 SELECT TO_CHAR(current_timestamp, 'YYYY-MM-DD');
- 将时间戳转换为12小时制。 - --返回结果:01:50:42 PM SELECT TO_CHAR(current_timestamp, 'HH12:MI:SS AM'); --返回结果:12:30:00 AM SELECT TO_CHAR(time '00:30:00', 'HH12:MI:SS AM');
- 时间戳字段的转换。 - CREATE TABLE time_test( a text, b TIMESTAMPTZ ); INSERT INTO time_test VALUES ('2001-09-28 03:00:00','2004-10-19 10:23:54+08'); --返回结果:10:23:54 SELECT TO_CHAR(b, 'HH24:MI:SS') FROM time_test; --将text的字段转换为日期,返回结果:2001-09-28 SELECT TO_CHAR(to_timestamp(a, 'YYYY-MM-DD'),'YYYY-MM-DD')FROM time_test;
- 跨时区的时间戳转换。 - CREATE TABLE timestamptz_test( a TIMESTAMPTZ); INSERT INTO timestamptz_test VALUES ('2023-03-21 10:23:54+02');- 不指定时区,则默认将a列转为系统时区(东八区)后转换为字符串。 - --返回结果:2023-03-21 16:23:54 SELECT TO_CHAR(a, 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;
- 指定时区为美东时区后,将a列其转换为字符串。 - --返回结果:2023-03-21 04:23:54 SELECT TO_CHAR(a at time zone 'US/Eastern', 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;
 
- 整数转换为字符串。 - --返回结果: 125 SELECT TO_CHAR(125, '999');
- 双精度数转换为字符串。 - --返回结果: 125.8 SELECT TO_CHAR(125.8::real, '999D9');
 
TO_DATE
- 描述:将字符串转换为日期,默认支持的时间范围为1925~2282年。 - TO_DATE(<text_date> TEXT, <format_mask> TEXT)
- 使用说明 - 自Hologres V1.1.31版本开始,在SQL前执行 - set hg_experimental_functions_use_pg_implementation = 'to_date';或者- set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';可支持所有时间。说明- 使用该GUC参数后,查询性能约有50%的损失,升级至Hologres V1.1.42及以上版本后,约有20%的损失。 
- 参数说明 - text_date:必填,需要转换的字符串。 
- format_mask:必填,转换为日期的格式。 
 
- 返回值说明 - 返回TEXT类型。 
- 示例 - 字符串转换为日期。 - --返回结果:2000-12-05 SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY'); --返回结果:2001-03-24 SELECT TO_DATE('2001 03 24', 'YYYY-MM-DD');
- TEXT类型的表字段转换为日期。 - CREATE TABLE time_test(a TEXT); INSERT INTO time_test VALUES ('2001-09-28 03:00:00'); SELECT TO_DATE(a, 'YYYY-MM-DD') FROM time_test;- 返回结果如下。 - to_date ------------ 2001-09-28
 
TO_TIMESTAMP
- 描述: - 将字符串转换为时间戳,默认支持时间范围为1925~2282年。 - TO_TIMESTAMP(<text_date> TEXT, <format_mask> TEXT)- 使用说明 - 执行结果中包含+08时。 
- 自Hologres V1.1.31版本开始,在SQL前执行 - set hg_experimental_functions_use_pg_implementation = 'to_timestamp';或者- set hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';可支持所有时间。说明- 使用该GUC参数后,查询性能约有50%的损失,升级至Hologres V1.1.42及以上版本后,约有20%的损失。 
 
- 参数说明 - text_date:必填,需要转换成时间戳的字符串。 
- format_mask:必填,转换成时间戳的格式。 
 
 
- 将时间戳转换为日期。 - TO_TIMESTAMP(DOUBLE PRECISION)说明- 从1970-01-01 00:00:00+00的秒数开始转换。 
 
- 返回值说明 - 返回TIMESTAMPTZ类型。 
- 使用示例: - 字符串转换为时间。 - SELECT TO_TIMESTAMP('05 Dec 2000', 'DD Mon YYYY');- 返回结果如下。 - to_timestamp ------------------------ 2000-12-05 00:00:00+08
- 将字符串类型转换为时间戳。 - CREATE TABLE time_test(a TEXT); INSERT INTO time_test VALUES ('2001-09-28 03:00:00'); SELECT TO_TIMESTAMP(a, 'YYYY-MM-DD') FROM time_test;- 返回结果如下。 - to_timestamp ------------------------ 2001-09-28 00:00:00+08
- 秒级时间戳的转换。 - --返回结果:1975-03-06 03:38:16+08 SELECT TO_TIMESTAMP(163280296);
- 毫秒级时间戳的转换。 - --返回结果:2021-09-28 12:22:41+08 SELECT TO_TIMESTAMP(1632802961000/1000);
 
MAKE_DATE
- 描述:使用年、月、日创建日期,默认支持的时间范围为1925~2282年。 - MAKE_DATE(<year> INT, <month> INT, <day> INT)
- 使用说明 - Hologres V2.0.29起支持该函数,暂不支持常量入参。 
- 返回值说明 - 返回DATE类型。 
- 示例 - --返回结果:2013-07-15 SELECT MAKE_DATE(2013, 7, 15);- 返回结果如下。 - make_date ------------ 2013-07-15
时间日期加减乘除函数
DATEADD
- 描述:根据指定的单位和数值,进行日期的增减运算,默认支持的时间范围为1925~2282年。 - DATEADD(<d> DATE|TIMESTAMP|TIMESTAMPTZ, <num> BIGINT, <str> TEXT)
- 使用说明 - 目前如下Hologres实例版本支持使用该函数: - V2.0.31至V2.1.0版本。 
- V2.1.13及以上版本。 
 说明- 且暂不支持常量入参写入。 
- 参数说明 - d:必填,原始的日期或时间值。 
- num:必填,增加或减少的数量。 
- str:必填,指定的时间单位,包括:年(yyyy、year)、月(mm、month、mon)、日(dd、day)、时(hh、hour)、分(mi)、秒(ss)。 
 
- 返回值说明 - 返回DATE、TIMESTAMP、TIMESTAMPTZ类型。 
- 示例 - CREATE TABLE test_dateadd (a TIMESTAMP); INSERT INTO test_dateadd VALUES ('2005-02-28 00:00:00'); -- 指定日期增加一个月 SELECT DATEADD(a , 1, 'mm') FROM test_dateadd;- 返回结果如下。 - dateadd --------------------- 2005-03-28 00:00:00
ADD_MONTHS
- 描述:为指定日期增加月份。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 - ADD_MONTHS(<d> DATE, <month> INT)
- 参数说明 - d:必填,原始日期。 
- month:必填,要添加到原始日期的整数。 
 
- 返回值说明 - 返回DATE类型。 
- 示例 - SELECT ADD_MONTHS(current_date, 2);- 返回结果如下。 - add_months ------------ 2024-10-05
DATEDIFF
- 描述:计算两个日期或时间戳之间的时间差,默认支持的时间范围为1925~2282年。 - DATEDIFF(<d1> DATE|TIMESTAMP|TIMESTAMPTZ, <d2> DATE|TIMESTAMP|TIMESTAMPTZ, <str> TEXT)
- 使用说明 - 目前如下Hologres实例版本支持使用该函数: - V2.0.31至V2.1.0版本。 
- V2.1.13及以上版本。 
 说明- 不支持全部入参均为常量。 
- 参数说明 - d1:必填,第一个日期或时间戳值。 
- d2:必填,第二个日期或时间戳值。 
- str:必填,指定计算时间差的时间单位,包括:年(yyyy、year)、月(mm、month、mon)、日(dd、day)、时(hh、hour)、分(mi)、秒(ss)。 
 
- 返回值说明 - 返回BIGINT类型,在指定的单位下时间差值不足1时,默认返回为0。 - 例如:2023-12-31与2024-01-01在年(year)单位下差值为0。 说明- 若需上述场景返回1,可在SQL前执行 - set hg_experimental_datediff_use_presto_impl = off;关闭该GUC参数。
- 示例 - CREATE TABLE test_datediff (a TIMESTAMP); INSERT INTO test_datediff VALUES ('2005-02-28 00:00:00'); -- 计算两个日期的分钟差值 SELECT DATEDIFF(a , '2005-03-02 00:00:00', 'mi') FROM test_datediff;- 返回结果如下。 - datediff ---------- -2880
MONTHS_BETWEEN
- 描述:计算两个日期之间相差的月数。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 - MONTHS_BETWEEN(DATE, DATE)
- 返回值说明 - 返回INT类型。 
- 示例 - 示例1 - --返回结果:2 SELECT MONTHS_BETWEEN('2022-01-01', '2021-11-01');
- 示例2 - --返回结果:-2 SELECT MONTHS_BETWEEN('2021-11-01', '2022-01-01');
 
NEXT_DAY
- 描述:计算指定日期后的下一个特定星期几所在的日期。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 - NEXT_DAY(<d> DATE, <str> TEXT|INT)
- 参数说明 - d:必填,指定日期。 
- str:必填,表示星期几的英文字符串,如Friday。也可以是表示星期几的数字,取值范围为1~7,其中1代表星期日,2代表星期一,以此类推。 
 
- 返回值说明 - 返回DATE类型。 
- 示例 - 示例1 - --返回结果:2022-05-06 SELECT NEXT_DAY('2022-05-01', 'FRIDAY');
- 示例2 - --返回结果:2022-05-06 SELECT NEXT_DAY('2022-05-01', 5);
 
时间日期相加:+
| 返回类型 | 示例 | 结果 | 
| DATE | 从指定日期开始向前加7天  | 2001-10-05 | 
| 当前日期向前加3天  | 2022-12-10 | |
| 当前时间向前加1天  | 2022-12-09 | |
| TIMESTAMP | 从指定日期开始向前加3个小时(0点开始计算)  | 2001-09-28 03:00:00 | 
| 从指定日期开始向前加1个小时(0点开始计算)  | 2001-09-28 01:00:00 | |
| TIMESTAMPTZ | 当前时间向前加1天  | 2022-12-08 20:09:19.388465+08 | 
| 当前时间向前加1个月  | 2023-01-08 20:21:50.993481+08 | |
| 当前时间向前加2年  | 2024-12-08 20:22:49.416343+08 | 
时间日期相减:-
| 返回类型 | 用例 | 结果 | 
| INTEGER | 指定日期相减  | 3 | 
| DATE | 指定日期减7天  | 2001-09-24 | 
| TIMESTAMP | 指定日期减3个小时  | 2001-09-27 21:00:00 | 
| 指定日期减1个小时  | 2001-09-27 23:00:00 | |
| 当前时间减2天  | 2022-12-06 20:27:21.094258+08 | 
时间日期相乘:*
| 返回类型 | 用例 | 结果 | 
| INTERVAL | 时间相乘  | 0 years 0 mons 63 days 0 hours 0 mins 0.0 secs | 
时间日期相除:/
| 返回类型 | 用例 | 结果 | 
| INTERVAL | 时间相除  | 0 years 0 mons 0 days 0 hours 40 mins 0.0 secs | 
时间日期截取函数
LAST_DAY
- 描述:获取指定日期所在月份的最后一天日期,默认支持的时间范围为1925~2282年。 - LAST_DAY(DATE|TIMESTAMP|TIMESTAMPTZ)
- 使用说明 - 目前仅如下Hologres版本支持使用该函数: 说明- 该函数暂不支持常量写入。 - V2.0.31至V2.1.0版本 
- V2.1.13及以上版本 
 
- 返回值说明 - 返回DATE类型。 
- 使用示例 - 获取 - 2004-02-28 00:00:00所在月份的最后一天日期。- CREATE TABLE test_last_day (a TIMESTAMP); INSERT INTO test_last_day VALUES ('2004-02-28 00:00:00'); SELECT LAST_DAY(a) FROM test_last_day;- 返回结果如下。 - last_day ------------ 2004-02-29
ORACLE_LAST_DAY
- 描述:获取指定日期所在月份的最后一天日期,默认支持的时间范围为1925~2282年。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 - ORACLE_LAST_DAY(DATE)
- 返回值说明 - 返回DATE类型。 
- 示例 - SELECT ORACLE_LAST_DAY('2022-05-01');- 返回结果如下。 - oracle_last_day ----------------- 2022-05-31
EXTRACT
- 描述:从一个日期时间表达式(TIMESTAMP)中提取特定的部分(比如年、月、日、小时等)。 - EXTRACT(field FROM TIMESTAMP)说明- field常量值取值包括:century(世纪)、day(天)、decade(十年)、dow(一周中的第几天,周日为0)、isodow(一周中的第几天,周日为7)、doy(一年中的第几天)、epoch(纪元)、hour(小时)、minute(分钟)、month(月份)、quarter(季度)、second(秒)、week(周)和year(年)。 
- 返回值说明 - 返回DOUBLE PRECISION类型。 
- 示例 - 获取指定日期的小时数。 - -- 返回结果:20 SELECT EXTRACT(hour FROM timestamp '2001-02-16 20:38:40');
- 获取当前时间的分钟数。 - -- 返回结果:12 SELECT EXTRACT(minute FROM NOW());
- 获取1970年到字段值时间的秒数。 - CREATE TABLE time_test(a TEXT); INSERT INTO time_test VALUES ('2001-09-28 03:00:00'); SELECT EXTRACT(epoch FROM to_timestamp(a, 'YYYY-MM-DD')) FROM time_test;- 返回结果如下。 - date_part ------------ 1001606400
 
DATE_PART
- 描述:从一个日期时间表达式(TIMESTAMP)中提取特定的部分(比如年、月、日、小时等),等效于EXTRACT函数。 - DATE_PART(<str> TEXT, <d> TIMESTAMP)
- 参数说明 - str:必填,指定提取的部分,取值包括:century(世纪)、day(天)、decade(十年)、dow(一周中的第几天,周日为0)、isodow(一周中的第几天,周日为7)、doy(一年中的第几天)、epoch(纪元以来的天数)、hour(小时)、minute(分钟)、month(月份)、quarter(季度)、second(秒)、week(周)和year(年)。 
- d:必填,日期时间表达式。 
 
- 返回值说明 - 返回DOUBLE PRECISION类型。 
- 示例 - 示例1:获取指定日期的小时数 - SELECT DATE_PART('hour', timestamp '2001-02-16 16:38:40');- 返回结果如下。 - date_part ----------- 16
- 示例2:从1月1日到指定日期的周数。 - SELECT DATE_PART('week', TO_DATE('2022-10-11', 'YYYY-MM-DD'));- 返回结果如下。 - date_part ----------- 41
- 示例3:从1月1日到指定日期的月数 - SELECT DATE_PART('month', TO_DATE('2022-10-11', 'YYYY-MM-DD'));- 返回结果如下。 - date_part ----------- 10
 
DATE_TRUNC
- 描述:将时间日期数据截断到指定的时间单位。 - DATE_TRUNC(<str> TEXT, <d> TIME|TIMESTAMP|TIMESTAMPTZ)
- 参数说明 - str:必填,要截断到的时间单位,包括century、decade、year、quarter、month、week、day、hour、minute、second等。 
- d:必填,待截取的时间日期。 
 
- 返回值说明 - 返回TIMESTAMP、TIMESTAMPTZ类型。 
- 使用示例 - 示例1:截断指定时间戳到小时。 - SELECT DATE_TRUNC('hour', time '12:38:40');- 返回结果如下。 - date_trunc ------------ 12:00:00
- 示例2:截断指定时间戳到天。 - SELECT DATE_TRUNC('day', timestamptz'2001-02-16 20:38:40+08');- 返回结果如下。 - date_trunc ------------------------ 2001-02-16 00:00:00+08
- 示例3:截断指定时间戳到月。 - SELECT DATE_TRUNC('month', timestamp '2001-02-16 18:38:40');- 返回结果如下。 - date_trunc --------------------- 2001-02-01 00:00:00
- 示例4:截取当前月的1号12点。 - SELECT DATE_TRUNC('month',now()) +interval '12h';- 返回结果如下。 - ?column? --------------------- 2024-08-01 12:00:00+08
- 示例5:截取当日9点。 - SELECT DATE_TRUNC('day',now()) + interval '9h';- 返回结果如下。 - ?column? ------------------------ 2024-08-08 09:00:00+08
- 示例6:截取每周的今天。 - SELECT DATE_TRUNC('day',now()) + interval '7d';- 返回结果如下。 - ?column? ------------------------ 2024-08-15 00:00:00+08
 
TRUNC
- 描述:将日期或时间戳截断到指定的时间单位。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 - TRUNC(<d> DATE|TIMESTAMP [, <str> TEXT])
- 参数说明 - d:必填,要被截断的日期时间。如果传入的是TIMESTAMPTZ,剩余部分会置为0。 
- str:可选,要截断到的时间单位,如果不填写,则返回原日期。取值包含:Y表示返回所属年份的第一天,Q表示返回所属季度的第一天,更多选项详情,请参见Oracle文档。 
 
- 返回值说明 - 返回DATE、TIMESTAMPTZ类型。 
- 示例 - 示例1 - SELECT TRUNC('2022-05-22'::date,'Y');- 返回结果如下。 - trunc ------------ 2022-01-01
- 示例2 - SELECT TRUNC('2022-05-22 13:11:22'::timestamp,'Y');- 返回结果如下。 - trunc --------------------- 2022-01-01 00:00:00
- 示例3 - SELECT TRUNC('2022-05-22 13:11:22'::timestamp,'Q');- 返回结果如下。 - trunc --------------------- 2022-04-01 00:00:00
- 示例4 - SELECT TRUNC('2022-05-22 13:11:22'::timestamp);- 返回结果如下。 - trunc --------------------- 2022-05-22 00:00:00
 
ROUND
- 描述:把日期时间圆整到最近的时间单位。该函数是Oracle兼容函数,需要先安装orafce扩展,具体请参见Oracle兼容函数。 - ROUND(<d> DATE|TIMESTAMPTZ [, <str> TEXT])
- 参数说明 - d:必填,要被圆整的日期时间,如果传入的是TIMESTAMPTZ,剩余部分会置为0。 
- str:可选,时间单位,如果不输入,则圆整到最近的一天。取值包含:Y表示圆整到最近的年份第一天,更多选项请参见Oracle文档。 
 
- 返回值说明 - 返回DATE、TIMESTAMPTZ类型。 
- 使用示例: - 示例1 - SELECT ROUND('2022-05-22'::date,'Y');- 返回结果如下。 - round ------------ 2022-01-01
- 示例2 - SELECT ROUND('2022-07-22'::date,'Y');- 返回结果如下。 - round ------------ 2023-01-01
- 示例3 - SELECT ROUND('2022-07-22 13:11:22'::timestamp,'Y');- 返回结果如下。 - round --------------------- 2023-01-01 00:00:00
- 示例4 - SELECT ROUND('2022-02-22 13:11:22'::timestamp);- 返回结果如下。 - round --------------------- 2022-02-23 00:00:00
 
获取当前时间日期函数
CURRENT_DATE
- 描述:获取当前日期。 - CURRENT_DATE
- 返回值说明 - 返回DATE类型。 
- 示例 - SELECT CURRENT_DATE;- 返回结果如下。 - current_date -------------- 2024-08-08
CURRENT_TIMESTAMP
- 描述:获取当前事务的开始时刻,等效于TRANSACTION_TIMESTAMP和NOW。 - CURRENT_TIMESTAMP说明- 在事务的整个运行周期内不改变。 
- 返回值说明 - 返回TIMESTAMPTZ类型。 
- 示例 - SELECT CURRENT_TIMESTAMP;- 返回结果如下。 - current_timestamp ------------------------------- 2024-08-08 14:55:11.006068+08
CLOCK_TIMESTAMP
- 描述:获取当前时刻。 - clock_timestamp()说明- 在同一条命令中也会发生变化。 
- 返回值说明 - 返回TIMESTAMPTZ类型。 
- 示例 - SELECT clock_timestamp();- 返回结果如下。 - clock_timestamp ------------------------------- 2024-08-08 14:57:43.569109+08
LOCALTIMESTAMP
- 描述:获取不包含时区的当前时间。 - LOCALTIMESTAMP
- 返回值说明 - 返回TIMESTAMPTZ类型。 
- 示例 - SELECT LOCALTIMESTAMP;- 返回结果如下。 - localtimestamp --------------------------- 2024-08-08 15:00:59.13245
NOW
- 描述:获取当前事务的开始时刻,等效于TRANSACTION_TIMESTAMP和CURRENT_TIMESTAMP。 - NOW()说明- 在事务的整个运行周期内不改变。 
- 返回值说明 - 返回TIMESTAMPTZ类型。 
- 示例 - SELECT NOW();- 返回结果如下。 - now ------------------------------- 2024-08-08 15:02:50.270501+08
STATEMENT_TIMESTAMP
- 描述:获取当前语句的开始时刻。 - STATEMENT_TIMESTAMP()说明- 在事务的不同命令中返回值不同。 
- 返回值说明 - 返回TIMESTAMPTZ类型。 
- 示例 - SELECT STATEMENT_TIMESTAMP();- 返回结果如下。 - statement_timestamp ------------------------------- 2024-08-08 15:06:14.772939+08
TIMEOFDAY
- 描述:获取当前时刻,类似于CLOCK_TIMESTAMP。但TIMEOFDAY函数返回的时间是以格式化文本字符串的形式呈现。 - TIMEOFDAY()
- 返回值说明 - 返回TEXT类型。 
- 示例 - SELECT TIMEOFDAY();- 返回结果如下。 - timeofday ------------------------------------- Thu Aug 08 15:08:16.599369 2024 CST
TRANSACTION_TIMESTAMP
- 描述:获取当前事务的开始时刻,等效于CURRENT_TIMESTAMP和NOW。 - TRANSACTION_TIMESTAMP()说明- 在事务的整个运行周期内不改变。 
- 返回值说明 - 返回TIMESTAMPTZ类型。 
- 示例 - SELECT TRANSACTION_TIMESTAMP();- 返回结果如下。 - transaction_timestamp ------------------------------- 2024-08-08 15:11:10.329005+08
其他
ISFINITE
- 描述: - 判断DATE类型的日期是否为有限值,即非无穷大或非无穷小。 - ISFINITE(DATE)
- 判断时间戳是否为有限值。 - ISFINITE(TIMESTAMP)
 
- 返回值说明 - 返回BOOLEAN类型。如果是有限值,则返回true(t),如果是无限值,则返回false(f)。 
- 使用示例 - 示例1 - SELECT ISFINITE(date '2001-02-16');- 返回结果如下。 - isfinite ---------- t
- 示例2 - SELECT ISFINITE(timestamp '2001-02-16 21:28:30');- 返回结果如下。 - isfinite ---------- t
 
常用SQL示例
- 示例1:N小时内的计算。 - SELECT NOW()+interval '2 hour';- 返回结果如下。 - ?column? --------------------- 2022-12-29 13:43:58.321104+08
- 示例2:日期转换为时间戳。 - SELECT EXTRACT(epoch FROM current_timestamp);- 返回结果如下。 - date_part --------------------- 1672285506.296279
- 示例3:日期字段和数字字段相加。 - CREATE TABLE date_test1( a DATE, b INT ); INSERT INTO date_test1 VALUES ('2021-09-28','12'); SELECT a + (b || ' month')::interval FROM date_test1;- 返回结果如下。 - ?column? -------------------- 2022-09-28 00:00:00
- 示例4:时间戳转换TIMESTAMP。 - SELECT TO_TIMESTAMP(TO_CHAR(20211027172045,'9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS');- 返回结果如下。 - to_timestamp ---------------------- 2021-10-27 17:20:45+08
- 示例5:时间的截取。 - SELECT EXTRACT(mon FROM now());- 返回结果如下。 - date_part --------- 12
- 示例6:整数相除场景。 - 两个整数相除有余数的场景中,Hologres会返回整数舍弃余数。示例: - 10/3,结果是3,如果需要显示余数,需要显式做类型转换,转成float再计算,如下所示:- SELECT 10/3::float;- 返回结果如下。 - ?column? --------- 3.3333333333333335