TO_TIME

将不同类型和格式的时间数据,构造或转换为以微秒为单位用BIGINT类型表示的时间值。

命令格式

TO_TIME函数支持以下四种签名格式,请根据不同使用需求选择不同的函数签名。

  • 签名1:将时间格式的String类型输入value,按照指定的format格式解析,并返回以微秒为单位用BIGINT类型表示的时间值。

    BIGINT TO_TIME(STRING <value>, STRING <format>)
  • 签名2:使用代表时、分、秒的BIGINT数据,构造以微秒为单位用BIGINT类型表示的时间值。

    BIGINT TO_TIME(BIGINT <hour>, BIGINT <minute>, BIGINT <second>)
  • 签名3:TIMESTAMP类型数据转换为指定时区的时间值,并返回以微秒为单位用BIGINT类型表示的时间值。

    BIGINT TO_TIME(TIMESTAMP <timestamp>[, STRING <time_zone>])
  • 签名4:TIMESTAMP_NTZ类型数据转换为以微秒为单位用BIGINT类型表示的时间值。

    BIGINT TO_TIME(TIMESTAMP_NTZ <timestamp_ntz>)

参数说明

参数

描述

value

必填,STRING类型,待转换的时间值,例如15:20:23

format

必填,STRING类型。待解析value的时间格式。待解析的时间字符串value中,每个时间元素都必须有对应的格式元素。例如:15:20对应hh:mi、15:20:23对应hh:mi:ss

format目前支持的时间部分的格式元素如下:

  • hhHH%H:小时。

  • miMI%M:分钟。

  • ssSS%S:秒。

  • ff3:毫秒,单独匹配秒的小数部分,例如用%S.ff3匹配00.123

  • %E<number>S:秒,小数精度为<number>位,例如用%E3S匹配00.123

  • %E*S:有完整6位小数精度的秒,例如00.123456

示例:hh:mi:ssHH:MI:SS%H:%M:%S%H:%M:%E6S%H:%M:%E6S

hour

必填,BIGINT类型,待转换时间的小时。

minute

必填,BIGINT类型,待转换时间的分钟。

second

必填,BIGINT类型,待转换时间的秒。

timestamp

必填,TIMESTAMP类型,待转换的时间戳值。

time_zone

可选,STRING类型,用来指定时区,

若未指定时区,则默认为当前Session/Project的时区。时区详情请参见时区列表

说明

若您未修改过项目时区,则默认为东八区(UTC+08:00)。

timestamp_ntz

必填,TIMESTAMP_NTZ类型,待转换的无时区时间戳值。

返回值说明

返回BIGINT类型。默认以微秒为单位表示时间值,返回规则如下:

  • 当入参为TIMESTAMPTIMESTAMP_NTZ类型时,去除其日期值和纳秒部分,返回结果的时间单位为微秒。

  • 当参数valuetimestamptimestamp_ntz的值为NULL时,返回报错。

  • 当参数hourminutesecond的值为NULL时,返回NULL。

  • 当参数format格式不合法,或者值为NULL时,返回NULL。

使用示例

示例1:TO_TIME(STRING <value>, STRING <format>)

--format不合法,返回 NULL
SELECT TO_TIME('13:24:33','%h:%m:%s'); 

--返回 48273000000 
SELECT TO_TIME('13:24:33','%H:%M:%S');

--返回 46860000000
SELECT TO_TIME('13:01:00','hh:mi:ss'); 

--返回 46860000000
SELECT TO_TIME('13:01','hh:mi'); 

--返回 781000000
SELECT TO_TIME('13:01','mi:ss'); 

--返回 781123000
SELECT TO_TIME('13:01.123','mi:ss.ff3');

--返回 NULL
SELECT TO_TIME('13:24:33', NULL );

--返回 48273123456
SELECT TO_TIME('13:24:33.123456','%H:%M:%E6S');

--返回 48273123456
SELECT TO_TIME('13:24:33.123456','%H:%M:%E*S');

示例2:TO_TIME(BIGINT <hour>, BIGINT <minute>, BIGINT <second>)

任一参数为NULL时,返回NULL。

--返回 55800000000
SELECT TO_TIME(15,30,00);

--返回 NULL 
SELECT TO_TIME(15,30);

--返回 NULL
SELECT TO_TIME(15,30, NULL);

示例3:TO_TIME(TIMESTAMP <timestamp>[, STRING <time_zone>])

TIMESTAMP类型数据转换为指定时区的时间值,并以微秒为单位返回BIGINT类型的时间值。

--当前Project时区为Asia/Shanghai
--返回 55801123000
SELECT TO_TIME(TIMESTAMP '2019-09-01 15:30:01.123'); 

--返回 15:30:01.123,使用format_time将to_time的返回结果转换为STRING类型时间值 15:30:01.123
SELECT FORMAT_TIME(TO_TIME(TIMESTAMP '2019-09-01 15:30:01.123'),"%H:%M:%S.ff3");


--指定时区为Asia/Shanghai,返回 55801123000
SELECT TO_TIME(TIMESTAMP '2019-09-01 15:30:01.123', 'Asia/Shanghai');

--指定时区为Asia/Tokyo,返回 59401123456
SELECT TO_TIME(TIMESTAMP '2019-09-01 15:30:01.123456', 'Asia/Tokyo');

--指定时区为Asia/Bangkok,返回 52201123456
SELECT TO_TIME(TIMESTAMP '2019-09-01 15:30:01.123456789', 'Asia/Bangkok');

示例4:TO_TIME(TIMESTAMP_NTZ <timestamp_ntz>)

--返回 55801123456
SELECT TO_TIME(TIMESTAMP_NTZ '2019-09-01 15:30:01.123456789'); 

相关函数

TO_TIME函数属于时间函数,更多时间计算、时间转换的相关函数请参见日期与时间函数