TO_TIMESTAMP_NTZ

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类型时间戳。返回规则如下:

  • timestampTIMESTAMP类型,或值为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:%Shh-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类型格式化后的时间戳。返回规则如下:

  • dateformattime_zone值为NULL时,返回NULL。

  • 当输入dateformat不匹配,或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函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数