TO_TIME、TIME¶
将输入表达式转换为时间。
- 另请参阅:
语法¶
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
或'integer'
或variant_expr
要转换为时间的表达式:
对于
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
:如果 VARIANT 包含 TIME 格式的字符串(例如
HH:MI:SS
),则执行字符串转换。如果 VARIANT 包含 INTEGER 格式的字符串,则执行字符串转换,并将值视为自午夜以来的秒数(如有必要,模数为 86400)。
如果 VARIANT 包含 JSON null 值,则输出为 NULL。
对于所有其他值,将生成转换错误。
可选:
format
string_expr
或 AUTO 的时间格式说明符,指定 Snowflake 应自动检测要使用的格式。有关更多信息,请参阅 转换函数中的日期和时间格式。默认值:TIME_INPUT_FORMAT 会话参数的当前值(默认为 AUTO)。
返回¶
返回值的数据类型是 TIME。如果输入为 NULL,则返回 NULL。
使用说明¶
输出中的时间显示格式由 TIME_OUTPUT_FORMAT 会话参数(默认为
HH24:MI:SS
)确定。如果输入参数的格式是包含整数的字符串,则值的度量单位(秒、微秒、毫秒或纳秒)按如下方式确定:
将字符串转换为整数后,该整数被视为自 Unix 纪元时间 (1970-01-01 00:00:00.000000000 UTC) 开始后的秒数、毫秒数、微秒数或纳秒数。
如果整数小于 31536000000(一年中的毫秒数),则该值被视为秒数。
如果该值大于或等于 31536000000 且小于 31536000000000,则该值被视为毫秒数。
如果该值大于或等于 31536000000000 且小于 31536000000000000,则该值被视为微秒数。
如果该值大于或等于 31536000000000000,则该值被视为纳秒数。
如果评估多行(例如,如果输入内容是包含多行的表的列名),则每个值都将单独得到检查,以确定该值表示的是秒数、毫秒数、微秒数还是纳秒数。
与 TO_TIME 函数不同,TIME 函数不支持可选的
format
参数。
示例¶
这些示例使用了 TO_TIME 和 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 OR REPLACE TABLE demo1_time (
description VARCHAR,
value VARCHAR -- string rather than bigint
);
INSERT INTO demo1_time (description, value) VALUES
('Seconds', '31536001'),
('Milliseconds', '31536002400'),
('Microseconds', '31536003600000'),
('Nanoseconds', '31536004900000000');
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 |
+--------------+-------------------+-------------------------+----------------+