You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何用T分隔符格式化时间戳?

问题描述

期望执行以下SQL语句:

SELECT to_char(current_timestamp AT TIME ZONE 'UTC', 'YYYY-MM-DDTHH24-MI-SS')

得到格式为2022-11-11T11-29-51的结果,但实际输出不符合预期。尝试了多种写法:

SELECT to_char(current_timestamp AT TIME ZONE 'UTC', 'YYYY-MM-DDTHH24-MI-SS') as plain,
       to_char(current_timestamp AT TIME ZONE 'UTC', E'YYYY-MM-DD\'T\'HH24-MI-SS') as with_quotes,
       to_char(current_timestamp AT TIME ZONE 'UTC', 'YYYY-MM-DD\THH24-MI-SS') as with_backslash,
       to_char(current_timestamp AT TIME ZONE 'UTC', 'YYYY-MM-DDT HH24-MI-SS') as with_space

但都无法得到目标格式,T被解析为模式的一部分而被忽略,如何实现预期输出?

解决方案

在PostgreSQL的to_char函数中,要保留固定的文本字符(比如这里的T),需要用双引号将其包裹,明确标记这是不需要解析的固定内容。

正确的SQL语句如下:

SELECT to_char(current_timestamp AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24-MI-SS');

如果你的模式字符串本身包含单引号,也可以使用美元引号($$)来避免转义问题,写法如下:

SELECT to_char(current_timestamp AT TIME ZONE 'UTC', $$YYYY-MM-DD"T"HH24-MI-SS$$);
原因说明
  • 直接写T时,PostgreSQL会将其视为日期/时间格式模式的一部分,但T并不是有效的格式符,因此会被直接忽略,导致输出中缺失T。
  • 你尝试的单引号转义写法(E'YYYY-MM-DD\'T\'HH24-MI-SS')无效,因为to_char的模式字符串中,单引号需要用两个连续单引号转义,而非反斜杠(反斜杠转义仅在特定字符串设置下生效,不推荐依赖)。
  • 反斜杠转义T的写法同样不被to_char的解析逻辑支持,无法保留T。

内容的提问来源于stack exchange,提问作者Vladislav Varslavans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:35:19