适用于:
Databricks Runtime 18.1 及更高版本
如果是 expr 字符串,请根据给定格式列表中的第一个匹配模式将其分析为一个 TIMESTAMP 。 一个或多个格式可以引用预定义的格式列表。 如果 expr 为数值类型,请将其分析为 Unix 时间戳。
Syntax
parse_timestamp(expr [, { pattern [...] } ])
Arguments
-
expr:要分析为的
TIMESTAMP字符串或数值。 接受的类型包括:-
TINYINT、SMALLINT、INT、BIGINT -
FLOAT、DOUBLE -
DECIMAL(最高 18 精度) STRING
-
-
pattern:时间戳模式的可选列表或对预定义列表的引用,例如
#iso8601或#rfc3339。 时间戳模式必须是 常量字符串。 如果未指定模式,则等效于指定#extended。
退货
一个 TIMESTAMP 表示已分析 expr的 。
expr如果为字符串,则根据第一个匹配模式对其进行分析。 如果没有任何模式匹配,该函数将引发错误。
如果为 expr 数字,则始终将其解析为 Unix 时间戳。
如果 expr 为 NULL,则函数返回 NULL。
若要在分析失败时返回 NULL 而不是错误,请使用 try_parse_timestamp 函数。
备注
- 如果模式列表包含
NULL值,则忽略它们。 如果所有提供的模式都是NULL,则结果是NULL。 - 如果时间戳与包含无时区信息的模式匹配,则会在会话时区中对其进行分析。
错误条件
- CANNOT_PARSE_TIMESTAMP
- DATATYPE_MISMATCH。UNEXPECTED_INPUT_TYPE
- INVALID_PARAMETER_VALUE。模式
- DATATYPE_MISMATCH。NON_FOLDABLE_INPUT
示例
-- Parse timestamp according to default pattern list
> SELECT parse_timestamp('2024-12-09T19:30:01');
2024-12-09 19:30:01.000
-- Parse a microsecond epoch timestamp using the unix pattern list
> SELECT parse_timestamp('1733772601000000', '#unix');
2024-12-09 19:30:01.000
-- Bad `expr` that does not match any pattern
> SELECT parse_timestamp('bad input');
Error: CANNOT_PARSE_TIMESTAMP
-- Use try_parse_timestamp to return NULL instead of error
> SELECT try_parse_timestamp('bad input');
NULL
-- Extend the default pattern list with custom patterns
> SELECT parse_timestamp(col, "#extended", "dd MMM, yyyy", "MMM d; yy") FROM VALUES ('2024-12-01'), ('02 Dec, 2024'), ('DEC 3; 24') AS t(col)
2024-12-01 00:00:00.000
2024-12-02 00:00:00.000
2024-12-03 00:00:00.000
模式参考
parse_timestamp和try_parse_timestamp函数使用与标准to_timestamp日期/时间模式不同的模式集。 下表列出了所有模式符号以及是否支持每个符号:
| 符号 | 含义 | 示例 | 支持 |
|---|---|---|---|
| U | unix | 请参阅下面的说明 | 支持 |
| G | 纪元 | AD;公元 | 不支持 |
| y | 年 | 2020;20 | 支持 |
| D | 一年的某一日 | 189 | 不支持 |
| M/L | 一年的某一月 | 7;07;七;七月 | 支持 |
| d | 一月的某一日 | 28 | 支持 |
| Q/q | 一年的某一季度 | 3;03;Q3;第三季度 | 不支持 |
| E | 星期几 | 周二;星期二 | 支持 |
| F | 一个月的星期几 | 3 | 不支持 |
| a | 一天中的上午下午 | 下午 | 支持 |
| h | 12 小时制的时钟小时 (1-12) | 12 | 支持 |
| K | 12 小时制的小时 (0-11) | 0 | 支持 |
| k | 24 小时制的时钟小时 (1-24) | 1 | 不支持 |
| H | 24 小时制的小时 (0-23) | 0 | 支持 |
| m | 分钟数 | 30 | 支持 |
| s | 秒数 | 55 | 支持 |
| S | 秒的小数 | 978 | 支持 |
| V | 时区 ID | 美洲/Los_Angeles;Z;-08:30 | 支持 |
| z | 时区名称 | 太平洋标准时间;PST | 支持 |
| O | 本地化区域偏移 | GMT+8;GMT+08:00;UTC-08:00 | 支持 |
| X | 区域偏移“Z”表示零 | Z;-08;-0830;-08:30 | 支持(1-3 位数字) |
| x | 区域偏移 | +0000;-08;-0830;-08:30 | 支持(1-3 位数字) |
| Z | 区域偏移 | +0000;-0800;-08:00 | 支持 |
| # | 模式列表 | #common、#iso8601 | 支持 |
注释
Unix 模式(U): 模式 #unix 列表分析 Unix epoch 时间戳。 对于 1971-08-03 和 3554-06-09 之间的日期,实现可以消除歧义和分析 Unix 时间戳(以秒、微秒和纳秒为单位)。 超出该范围的日期可能无法正确分析或分析。 不支持负整数。 小数位数最多支持 9 个小数位数,并截断以匹配结果类型的精度。
现场: 模式占位符不识别区域设置。 仅英语支持月份和日期名称。
模式列表
可以按名称(例如 #extended, #iso8601) #unix传递预定义的模式列表。 以下模式列表可用:
- 常见 — 通常找不到由标准定义的模式
- iso8601
- rfc1036、 rfc1123、 rfc2822、 rfc3164、 rfc3339、 rfc4287、 rfc5322、 rfc5424、 rfc6265、 rfc7231、 rfc822、 rfc850、 rfc9110、 rfc9557
- unix — 仅 Unix 纪元时间戳
- 扩展 - 上述所有列表的联合;如果未指定模式,则为默认值
- extended-dmy - 使用特定于 DMY 区域设置的格式进行扩展
- extended-mdy - 使用 MDY 区域设置特定格式进行扩展