本文为您介绍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