SQL 变更:添加新的日期和时间格式元素(待定)

注意

此行为变更包含在 2026_03 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

启用此行为变更捆绑包后,将启用新的短格式日期和时间格式元素,这会影响日期时间格式和解析逻辑。

变更前:

在日期时间到字符串或字符串到日期时间转换中,以下格式元素被解析并序列化为字面量字符:YMODH24H12HMESP

变更后:

以下新格式元素现在由解析和格式化逻辑解释:

  • Y 对应“年”(非填充)

  • MO 对应“月”(非填充)

  • D 对应“日”(非填充)

  • H24 对应“一天中采用 24 小时制的小时”(非填充)

  • H12 对应“一天中采用 12 小时制的小时”(非填充)

  • HH24 同义

  • ME 对应“分钟”(非填充)

  • S 对应“秒”(非填充)

  • P 对应“单个字母AM/PM指示器”(A 表示 AM,或 P 表示 PM)

这些字符或序列的任何未加引号的用法都将被解释为格式元素,而不是字面量。

此行为变更可能会对那些在 DATE、TIME、TIMESTAMP_LTZ、TIMESTAMP_NTZ 或 TIMESTAMP_TZ 的格式模型中将这些新格式元素作为未加引号的字符使用的用户构成破坏性变更。

例如:

  • 以前,SELECT TO_CHAR(current_timestamp(), 'YYYY-MM-DD JST') 会将序列“JST”作为字面量字符输出,例如:2026-03-18 JST

  • 现在,JST 中的 S 会被解释为“秒”格式元素,格式化逻辑会插入一个数值:2026-03-18 J47T

您需要做什么

如果在格式模型中将这些新格式元素中的任何一个用作未加引号的字符或字符串,请引用格式模型中应保留为字面量字符的任何部分。例如:

-- Before (incorrect after this change):
SELECT TO_CHAR(current_timestamp(), 'YYYY-MM-DD JST');

-- After (corrected):
SELECT TO_CHAR(current_timestamp(), 'YYYY-MM-DD "JST"');

参考:2281