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函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数。