TO_TIME、TIME¶
将输入表达式转换为时间。如果输入为 NULL,则返回 NULL。
- 另请参阅:
语法¶
TO_TIME( <string_expr> [, <format> ] )
TO_TIME( <timestamp_expr> )
TO_TIME( '<integer>' )
TO_TIME( <variant_expr> )
TIME( <string_expr> )
TIME( <timestamp_expr> )
TIME( '<integer>' )
TIME( <variant_expr> )
实参¶
必填:
string_expr
或timestamp_expr
或variant_expr
或integer
要转换为时间的表达式:
对于
string_expr
,将字符串转换为时间的结果。对于
timestamp_expr
,输入值的时间部分。对于
'integer'
(包含整数的字符串),整数被视为自 Unix 时间戳开始后的秒数、毫秒数、微秒数或纳秒数。请参阅下面的 使用说明。对于此时间戳,该函数获取 Unix 时间戳开始后的秒数。该函数执行 模运算 (link removed),以获取将此数字除以一天中的秒数 (
86400
) 所产生的余数:number_of_seconds % 86400
该函数将此余数解释为午夜后的秒数。
例如,假设值为
31536002789
。根据此值的大小,该函数使用毫秒作为时间单位,并确定此值表示
1971-01-01 00:00:02.789
。该函数获取此值在 Unix 时间戳之后的秒数 (
31536002
)。该函数获取将该数字除以一天中的秒数 (
31536002 % 86400
) 所产生的余数。该函数使用余数 (
2
) 作为午夜后的秒数。结果时间为00:00:02
。
备注
不建议使用带引号的整数作为输入内容。
对于
variant_expr
:如果变体包含 TIME 格式(“HH:MI:SS”)的字符串,则执行字符串转换。
如果变体包含 INTEGER 格式的字符串,则执行字符串转换,并将值视为自午夜以来的秒数(如有必要,模数为 86400)。
如果变体包含 JSON null 值,则输出为 NULL。
对于所有其他值,将生成转换错误。
可选:
format
string_expr
或 AUTO 的时间格式说明符,指定 Snowflake 应自动检测要使用的格式。有关更多信息,请参阅 转换函数中的日期和时间格式。默认值:TIME_INPUT_FORMAT 会话参数的当前值(通常为 AUTO)。
返回¶
返回值的数据类型是 TIME
。
使用说明¶
如果输入参数的格式是包含整数的字符串,则值的度量单位(秒、微秒、毫秒或纳秒)按如下方式确定:
将字符串转换为整数后,该整数被视为自 Unix 纪元时间 (1970-01-01 00:00:00.000000000 UTC) 开始后的秒数、毫秒数、微秒数或纳秒数。
如果整数小于 31536000000(一年中的毫秒数),则该值被视为秒数。
如果该值大于或等于 31536000000 且小于 31536000000000,则该值被视为毫秒数。
如果该值大于或等于 31536000000000 且小于 31536000000000000,则该值被视为微秒数。
如果该值大于或等于 31536000000000000,则该值被视为纳秒数。
备注
弃用警告:未来版本的 Snowflake 可能会自动将字符串化的整数值解释为秒数,而不是毫秒数、微秒数或纳秒数。Snowflake 建议您仅在打算将整数解释为秒数时,才使用包含整数的字符串调用 TO_DATE、TO_TIME 或 TO_TIMESTAMP。
如果评估多行(例如,如果输入内容是包含多行的表的列名),则每个值都将单独得到检查,以确定该值表示的是秒数、毫秒数、微秒数还是纳秒数。
与 TO_TIME 函数不同,TIME 函数不支持可选的
format
参数。
示例¶
这些示例演示了 TO_TIME
函数。
SELECT TO_TIME('13:30:00'), TIME('13:30:00'); +---------------------+------------------+ | TO_TIME('13:30:00') | TIME('13:30:00') | |---------------------+------------------| | 13:30:00 | 13:30:00 | +---------------------+------------------+SELECT TO_TIME('13:30:00.000'), TIME('13:30:00.000'); +-------------------------+----------------------+ | TO_TIME('13:30:00.000') | TIME('13:30:00.000') | |-------------------------+----------------------| | 13:30:00 | 13:30:00 | +-------------------------+----------------------+
此示例演示如何使用 TO_TIME
函数处理默认冒号以外的字段分隔符(此示例使用句点字符作为小时和分钟之间以及分钟和秒之间的分隔符):
SELECT TO_TIME('11.15.00', 'HH24.MI.SS'); +-----------------------------------+ | TO_TIME('11.15.00', 'HH24.MI.SS') | |-----------------------------------| | 11:15:00 | +-----------------------------------+
此示例演示 TO_TIME
函数如何解释包含整数值的字符串:
CREATE TABLE demo1_time ( description VARCHAR, value VARCHAR -- yes, string rather than bigint ); +----------------------------------------+ | status | |----------------------------------------| | Table DEMO1_TIME successfully created. | +----------------------------------------+ INSERT INTO demo1_time (description, value) VALUES ('Seconds', '31536001'), ('Milliseconds', '31536002400'), ('Microseconds', '31536003600000'), ('Nanoseconds', '31536004900000000') ; +-------------------------+ | number of rows inserted | |-------------------------| | 4 | +-------------------------+SELECT description, value, TO_TIMESTAMP(value), TO_TIME(value) FROM demo1_time ORDER BY value ; +--------------+-------------------+-------------------------+----------------+ | DESCRIPTION | VALUE | TO_TIMESTAMP(VALUE) | TO_TIME(VALUE) | |--------------+-------------------+-------------------------+----------------| | Seconds | 31536001 | 1971-01-01 00:00:01.000 | 00:00:01 | | Milliseconds | 31536002400 | 1971-01-01 00:00:02.400 | 00:00:02 | | Microseconds | 31536003600000 | 1971-01-01 00:00:03.600 | 00:00:03 | | Nanoseconds | 31536004900000000 | 1971-01-01 00:00:04.900 | 00:00:04 | +--------------+-------------------+-------------------------+----------------+