本文為您介紹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