parse_timestamp 函数

适用于:检查标记为“是”的 Databricks Runtime 18.1 及更高版本

如果是 expr 字符串,请根据给定格式列表中的第一个匹配模式将其分析为一个 TIMESTAMP 。 一个或多个格式可以引用预定义的格式列表。 如果 expr 为数值类型,请将其分析为 Unix 时间戳。

Syntax

parse_timestamp(expr [, { pattern [...] } ])

Arguments

  • expr:要分析为的 TIMESTAMP字符串或数值。 接受的类型包括:
    • TINYINTSMALLINTINTBIGINT
    • FLOATDOUBLE
    • DECIMAL (最高 18 精度)
    • STRING
  • pattern:时间戳模式的可选列表或对预定义列表的引用,例如 #iso8601#rfc3339。 时间戳模式必须是 常量字符串。 如果未指定模式,则等效于指定 #extended

退货

一个 TIMESTAMP 表示已分析 expr的 。

expr如果为字符串,则根据第一个匹配模式对其进行分析。 如果没有任何模式匹配,该函数将引发错误。

如果为 expr 数字,则始终将其解析为 Unix 时间戳。

如果 exprNULL,则函数返回 NULL

若要在分析失败时返回 NULL 而不是错误,请使用 try_parse_timestamp 函数

备注

  • 如果模式列表包含 NULL 值,则忽略它们。 如果所有提供的模式都是 NULL,则结果是 NULL
  • 如果时间戳与包含无时区信息的模式匹配,则会在会话时区中对其进行分析。

错误条件

示例

-- 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_timestamptry_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
  • rfc1036rfc1123rfc2822rfc3164rfc3339rfc4287rfc5322rfc5424rfc6265rfc7231rfc822rfc850rfc9110rfc9557
  • unix — 仅 Unix 纪元时间戳
  • 扩展 - 上述所有列表的联合;如果未指定模式,则为默认值
  • extended-dmy - 使用特定于 DMY 区域设置的格式进行扩展
  • extended-mdy - 使用 MDY 区域设置特定格式进行扩展