• CSV 和 JSON 数据源使用模式字符串对日期/时间内容进行分析和格式设置。
  • STRING DATE TIMESTAMP 之间相互转换相关的 Datetime 函数。
  • unix_timestamp
  • date_format
  • to_unix_timestamp
  • from_unixtime
  • to_date
  • to_timestamp
  • from_utc_timestamp
  • to_utc_timestamp
  • Azure Databricks 使用下表中的模式字母进行日期和时间戳的分析和格式设置:

    模式字母的计数决定了格式。

  • 文本:文本样式根据使用的模式字母数确定。 如果少于 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');
    > SELECT date_format(date '1970-12-01', 'L');
    
  • 'MM''LL':一年中的月份数从 1 开始。 将为月份 1-9 添加零填充。

    > SELECT date_format(date '1970-1-01', 'LL');
    > SELECT date_format(date '1970-09-01', 'MM');
    
  • '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 января
    
  • 区域 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

  • date_format 函数
  • from_unixtime 函数
  • from_utc_timestamp 函数
  • to_date 函数
  • to_timestamp 函数
  • to_utc_timestamp 函数
  • to_unix_timestamp 函数
  • unix_timestamp 函数
  •