跳到主要内容

数据类型格式化函数

格式化函数在数值、日期时间与文本之间转换,主要用于展示或解析,不应把格式化文本代替原始类型保存。以下使用 PostgreSQL,输出还可能受 lc_time、时区等配置影响。

输出格式:to_char​

SELECT to_char(date '2025-03-08', 'YYYY-MM-DD'); -- 2025-03-08
SELECT to_char(1234.5::numeric, 'FM9,999.00'); -- 1,234.50

常用日期模板包括 YYYY 年、MM 月、DD 日、HH24 小时、MI 分钟、SS 秒。数值模板中 9 是可选数位、0 是需要补零的数位;FM 抑制填充空格。模板中的普通字母可能被解释为格式符,要输出固定文字应按 PostgreSQL 模板规则引用。

解析输入​

SELECT to_date('2025/03/08', 'YYYY/MM/DD');
SELECT to_timestamp('2025-03-08 14:30', 'YYYY-MM-DD HH24:MI');
SELECT to_number('1,234.50', '9,999.99');

to_date 返回 date;to_timestamp(text, text) 返回带时区的 timestamptz,若输入未写时区,则依据会话时区解释。不要与 to_timestamp(double precision)(从 Unix 秒数转换)混淆。部分格式解析较宽松,数据导入若必须严格校验,应另做范围、完整性检查或使用显式类型转换验证。

常见误区​

  • MM 是月份,MI 是分钟;HH12 需要配合上午/下午标记时检查语义。
  • 模板中的 .、, 与区域设置有关;面向机器的接口优先使用标准化类型或 ISO 日期时间表示,而非依赖会话区域设置。
  • to_char(timestamp, ...) 返回 text,按文本排序可能与时间排序不同;先按原始时间列排序,再格式化展示。
  • 在筛选列上格式化可能妨碍普通索引使用,范围查询应尽量对原始类型比较。