日期/时间模式
适用于: Databricks SQL Databricks Runtime
Azure Databricks 中的日期/时间有几种常见使用场景:
- CSV 和 JSON 数据源使用模式字符串对日期/时间内容进行分析和格式设置。
- 与
STRING
和DATE
或TIMESTAMP
之间相互转换相关的 Datetime 函数。 例如:
模式表
Azure Databricks 使用下表中的模式字母进行日期和时间戳的分析和格式设置:
符号 | 含义 | 呈现 | 示例 |
---|---|---|---|
G | 纪元 | 文本 | AD;公元 |
y | year | year | 2020;20 |
D | 一年的某一日 | 数字 (3) | 189 |
M/L | 一年的某一月 | 月份 | 7;07;七;七月 |
d | 一月的某一日 | 数字 (3) | 28 |
Q/q | 一年的某一季度 | 数字/文本 | 3;03;Q3;第三季度 |
E | 星期几 | 文本 | 周二;星期二 |
F | 一个月的星期几 | 数字 (1) | 3 |
a | 一天中的上午下午 | am-pm | PM |
h | 12 小时制的时钟小时 (1-12) | 数字 (2) | 12 |
K | 12 小时制的小时 (0-11) | 数字 (2) | 0 |
k | 24 小时制的时钟小时 (1-24) | 数字 (2) | 0 |
H | 24 小时制的小时 (0-23) | 数字 (2) | 0 |
m | 分钟数 | 数字 (2) | 30 |
s | 秒数 | 数字 (2) | 55 |
S | 秒的小数 | fraction | 978 |
V | 时区 ID | 区域 ID | America/Los_Angeles; Z; -08:30 |
z | 时区名称 | 区域名称 | 太平洋标准时间;PST |
O | 本地化区域偏移 | offset-O | GMT+8; GMT+08:00; UTC-08:00; |
X | 区域偏移“Z”表示零 | offset-X | Z; -08; -0830; -08:30; -083015; -08:30:15; |
x | 区域偏移 | offset-x | +0000; -08; -0830; -08:30; -083015; -08:30:15; |
Z | 区域偏移 | offset-Z | +0000; -0800; -08:00; |
‘ | 文本转义 | delimiter | |
‘’ | 单引号 | 串 | ‘ |
[ | 可选部分开始 | ||
] | 可选部分结束 |
模式字母的计数决定了格式。
文本:文本样式根据使用的模式字母数确定。 如果少于 4 个模式字母,则将使用短文本格式,通常为缩写,例如星期几,Monday 可能输出为“Mon”。 如果刚好有 4 个模式字母,则将使用全文本格式,通常为完整描述,例如星期几,Monday 可能输出为“Monday”。 5 个或更多个字母将会失败。
数字 (n):此处的 n 表示这种类型的日期/时间模式可以使用的最大字母数。 如果字母数为 1,则输出值时使用最小位数且不填充。 除此之外,数字个数用作输出字段的宽度,并根据需要使用零值填充。
数字/文本:如果模式字母数为 3 或更大,请使用上述文本规则。 否则使用上述数字规则。
分数:使用一个或多个(最多 9 个)连续
'S'
字符(例如SSSSSS
)来解析和格式化秒的分数部分。 对于分析,可接受的小数长度可以为 [1,即连续的“S”的数目]。 对于格式设置,小数长度将填充为带零的连续“S”的数目。 Azure Databricks 支持微秒精度的日期/时间,其最多可有 6 位有效数字,但可以解析纳米秒,此时会截断超出位数。年份:字母数决定了使用填充的最小字段宽度。 如果字母数为 2,则使用减少的两位数字格式。 对于输出,这会输出最右侧的两个数字。 对于分析,这将使用基值 2000 进行分析,得到 2000 到 2099 范围内(含 2000 和 2099)的年份。 如果字母数小于 4(但不是 2),则符号仅输出为负数。 否则,如果在“G”不存在时超出填充宽度,则会输出符号。 7 个或更多个字母将会失败。
月份:它遵循数字/文本的规则。 文本形式取决于字母 -
'M'
表示“标准”形式,'L'
表示“独立”形式。 这两种形式仅在某些语言中是不同的。 例如,在俄语中,“Июль”是七月的独立形式,而“Июля”是标准形式。 下面是所有受支持的模式字母的示例:'M'
或'L'
:一年中的月份数从 1 开始。'M'
和'L'
没有任何区别。 1 到 9 的月份输出时没有填充。> SELECT date_format(date '1970-01-01', 'M'); 1 > SELECT date_format(date '1970-12-01', 'L'); 12
'MM'
或'LL'
:一年中的月份数从 1 开始。 将为月份 1-9 添加零填充。> SELECT date_format(date '1970-1-01', 'LL'); 01 > SELECT date_format(date '1970-09-01', 'MM'); 09
'MMM'
:标准形式的短文本表示形式。 月份模式应该是日期模式的一部分,而不只是一个独立的月份,但区域设置除外,在区域设置中,标准形式和独立形式之间没有区别(如英语)。> SELECT date_format(date '1970-01-01', 'd MMM'); 1 Jan -- Passing a format pattern to to_csv() > SELECT to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'dd MMM', 'locale', 'RU')); 01 янв.
'MMMM'
:标准形式的完整文本月份表示形式。 它用于将月份分析/格式设置为日期/时间戳的一部分。> SELECT date_format(date '1970-01-01', 'd MMMM'); 1 January -- Passing a format pttern to to_csv() > SELECT to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'd MMMM', 'locale', 'RU')); 1 января
am-pm:这会输出一天中的上午下午。 模式字母数必须为 1。
区域 ID(V):这将输出显示时区 ID。 模式字母数必须为 2。
区域名称(z):这将输出时区 ID 的显示文本名称。 如果字母计为 1、2 或 3,则输出短名称。 如果字母计为 4,则输出全名。 5 个或更多个字母将失败。
偏移量 X 和 x:这会根据模式字母的数量格式化偏移量。 1 个字母仅输出小时,如“+01”,除非分钟不为零,在这种情况下,也会输出分钟,如“+0130”。 2 个字母将输出小时和分钟,不带冒号,如“+0130”。 3 个字母将输出小时和分钟,带冒号,如“+01:30”。 4 个字母将输出小时、分钟以及可选的秒,不带冒号,如“+013015”。 5 个字母将输出小时、分钟以及可选的秒,带冒号,如“+01:30:15”。 6 个或更多个字母将会失败。 当要输出的偏移量为零时,模式字母“X”(大写)将输出“Z”,而模式字母“x”(小写)将输出“+00”、“+0000”或“+00:00”。
偏移量 O:这会根据模式字母的数量格式化本地偏移量。 1 个字母将输出本地化偏移的短格式,即本地化偏移文本(如“GMT”),包含没有前导零的小时、可选的 2 位数分钟和秒(如果不为零),带冒号,如“GMT+8”。 4 个字母将输出完整格式,即本地化偏移文本,如“GMT”,其中包含 2 位数的小时和分钟字段,可选的秒字段(如果不为零),带冒号,如“GMT+08:00”。 任何其他字母数都将失败。
偏移量 Z:这会根据模式字母的数量格式化偏移量。 1、2 或 3 个字母将输出小时和分钟,不带冒号,如“+0130”。 偏移量为零时,输出为“+0000”。 4 个字母将输出本地化偏移,等效于 4 个字母的Offset-O。 如果偏移量为零,则输出为相应的本地化偏移文本。 5 个字母将输出小时、分钟和可选的秒(如果不为零),带冒号。 如果偏移量为零,则输出“Z”。 6 个或更多个字母将会失败。
可选部分的开始和结束:使用
[]
定义可选部分,可能是嵌套的。 在设置格式的过程中,即使所有有效数据都处于可选部分,也会输出。 在分析过程中,已分析字符串中可能会缺少整个部分。 可选部分以[
开头,并使用]
结尾(或在模式末尾)。符号“E”、“F”、“q”和“Q”只能用于日期/时间格式设置,例如
date_format
。 它们不能用于日期时间分析,例如to_timestamp
。