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