TO_TIMESTAMP_NTZ函數用於將不同類型的日期時間資料,轉換為TIMESTAMP_NTZ類型的時間戳記。
將TIMESTAMP轉換為指定時區TIMESTAMP_NTZ
命令格式
TIMESTAMP_NTZ TO_TIMESTAMP_NTZ(TIMESTAMP <timestamp>, STRING <time_zone>)參數說明
timestamp:必填。待轉換的時間戳記。TIMESTAMP類型。
time_zone:必填。用於指定時區。STRING類型。
傳回值說明
返回指定時區TIMESTAMP_NTZ類型時間戳記。返回規則如下:
timestamp非TIMESTAMP類型,或值為NULL時,返回報錯。
time_zone值為NULL時,返回NULL。
使用樣本
將TIMESTAMP時間戳記從Session/Project時區轉換為指定時區,並返回TIMESTAMP_NTZ類型時間戳記。
-- 設定Session/Project時區為Asia/Shanghai。
SET odps.sql.timezone=Asia/Shanghai;
-- 返回 2025-04-08 08:10:30.123456789
SELECT TO_TIMESTAMP_NTZ(TIMESTAMP '2025-04-08 16:10:30.123456789', "Etc/GMT");
-- 返回 2025-04-08 17:10:30.123456789
SELECT TO_TIMESTAMP_NTZ(TIMESTAMP '2025-04-08 16:10:30.123456789', "Asia/Tokyo");
-- 返回 2025-04-08 16:10:30.123456789
SELECT TO_TIMESTAMP_NTZ(TIMESTAMP '2025-04-08 16:10:30.123456789', "Asia/Shanghai");
-- 返回 NULL
SELECT TO_TIMESTAMP_NTZ(TIMESTAMP '2025-04-08 16:10:30.123456789', NULL);將滿足format格式的STRING類型的日期時間資料,轉換成TIMESTAMP_NTZ
命令格式
TIMESTAMP_NTZ TO_TIMESTAMP_NTZ(STRING <date>, STRING <format> [,STRING <time_zone>])參數說明
date:必填。滿足format格式的日期時間資料。STRING類型。
format:必填。日期時間格式。STRING類型。目前支援的日期和時間部分的格式元素如下:
日期部分格式元素
%Y/yyyy/YYYY:以十進位數表示的年份和世紀。%y:以十進位數(00-99)表示的年份(不帶世紀),前置字元為零可選。%m/mm/MM:以十進位數(01-12)表示的月份。%B:完整月份名稱,例如January。%b/%h:縮寫的月份名稱,例如Jan。%d/dd/DD:以十進位數(01-31)表示的月份日期 。%e:以十進位數字(1-31)表示的月份中的第幾天,例如2(其中“dd”將得到02)。%F:相當於%Y-%m-%d(yyyy-mm-dd)。
時間部分格式元素
%H/hh/HH:以十進位數(00-23)表示的小時(24 小時制)。%M/mi/MI:以十進位數(00-59)表示的分鐘。%S/ss/SS:以十進位數(00-60)表示的秒。%X:相當於HH:MM:SS格式的時間。%T:相當於%H:%M:%S(hh-mi-ss)。ff3:以三位十進位數(000~999)表示的毫秒,代表秒的小數部分。例如用%S.ff3匹配00.123。%Ez:表示數字時區(+HH:MM或-HH:MM)。%E<number>S:秒,小數精度為<number>位,例如用%E3S匹配00.123。%E*S:有完整6位小數精度的秒,例如00.123456。
time_zone:可選。用於指定輸入日期的時區。STRING類型。若未指定,則預設為UTC時區。
傳回值說明
返回TIMESTAMP_NTZ類型。將輸入STRING類型格式化後的時間戳記。返回規則如下:
當date、format或time_zone值為NULL時,返回NULL。
當輸入date與format不匹配,或format參數不合法,返回NULL。
使用樣本
-- 設定Session/Project時區值,對輸入與輸出時間戳記無影響。
SET odps.sql.timezone=Asia/Shanghai;
-- 返回 2017-11-11 00:00:00.123
SELECT TO_TIMESTAMP_NTZ('17-11-11 00:00:00.123','%y-mm-dd hh:mi:ss.ff3');
-- 返回 2017-11-11 00:00:00.123
SELECT TO_TIMESTAMP_NTZ('0017-11-11 00:00:00.123','%y-mm-dd hh:mi:ss.ff3');
-- 返回 1970-11-11 00:00:00.123 --缺少日期元素年,自動補充1970
SELECT TO_TIMESTAMP_NTZ('11-11 00:00:00.123','mm-dd hh:mi:ss.ff3');
-- 返回 2025-05-18 15:30:00
SELECT TO_TIMESTAMP_NTZ('2025-05-18 15:30:00 MAY','%F %X %B');
-- 返回 2025-05-18 15:30:00
SELECT TO_TIMESTAMP_NTZ('2025-05-18 15:30:00 may','%F %X %h');
-- 返回 2025-05-18 15:30:00
SELECT TO_TIMESTAMP_NTZ('2025-05-18 15:30:00 may','%F %T %b');
-- 返回 2025-05-18 10:20:00
SELECT TO_TIMESTAMP_NTZ('20250518 10:20:00','yyyymm%e %T');
-- 返回 2025-05-18 02:30:00
SELECT TO_TIMESTAMP_NTZ('2025-05-18 09:30:00+07:00','%F %H:%M:%S%Ez');
-- 返回 2025-04-08 16:10:30.123456
SELECT TO_TIMESTAMP_NTZ("2025-04-08 16:10:30.123456",'%Y-%m-%d %H:%M:%E*S','Etc/GMT') ;
-- 返回 2025-04-08 08:10:30.123
SELECT TO_TIMESTAMP_NTZ("2025-04-08 16:10:30.123",'%Y-%m-%d %H:%M:%E3S','Asia/Shanghai');將BIGINT類型表示的時間值轉換成TIMESTAMP_NTZ
命令格式
TIMESTAMP_NTZ TO_TIMESTAMP_NTZ(BIGINT <time>, STRING <date_part>)參數說明
time:必填。待轉換的時間值。BIGINT類型。
date_part:必填。時間單位。STRING類型。目前支援的取值有:毫秒MILLIS、微秒MICROS和納秒NANOS。
傳回值說明
返回TIMESTAMP_NTZ類型UTC時間戳記。返回規則如下:
time值為NULL時,返回報錯。
date_part值為NULL時,返回NULL。
使用樣本
輸入參數是以BIGINT類型表示的毫秒(MILLIS)、微秒(MICROS)或納秒(NANOS)時間值,系統會以 1970-01-01 00:00:00 UTC 為起點加上時間值,並返回TIMESTAMP_NTZ類型時間戳記。
-- 設定Session/Project時區值,對輸入與輸出時間戳記無影響
SET odps.sql.timezone=Asia/Shanghai;
-- 返回 1973-03-03 09:35:41.234
SELECT TO_TIMESTAMP_NTZ(99999341234, 'MILLIS');
-- 返回 1970-01-02 03:46:39.341234
SELECT TO_TIMESTAMP_NTZ(99999341234, 'MICROS');
-- 返回 1970-01-01 00:01:39.999341234
SELECT TO_TIMESTAMP_NTZ(99999341234, 'NANOS');
-- 返回 1966-10-31 14:24:18.766
SELECT TO_TIMESTAMP_NTZ(-99999341234, 'MILLIS');
-- 返回 NULL
SELECT TO_TIMESTAMP_NTZ(99999341234, NULL);相關函數
TO_TIMESTAMP_NTZ函數屬於日期函數,更多日期計算、日期轉換的相關函數請參見日期函數。