↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.0 / 6.5
历史版本PostgreSQL 7.0 已于 2005 年 5 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

5.5. 格式化函数

作者

由 Karel Zak 于 2000-01-24 编写。

Postgres 格式化函数提供了一套强大的工具,用于把各种数据类型(日期/时间、整数、浮点、numeric)转换为 格式化的字符串以及把格式化的字符串转换回原始的数据类型。

注意

所有格式化函数的第二个参数都是用于转换的模板。

表 5.7. 格式化函数

函数 返回 描述 例子
to_char(timestamp, text) text 把 timestamp 转换为字符串 to_char(timestamp 'now','HH12:MI:SS')
to_char(int, text) text 把 int4/int8 转换为字符串 to_char(125, '999')
to_char(float, text) text 把 float4/float8 转换为字符串 to_char(125.8, '999D9')
to_char(numeric, text) text 把 numeric 转换为字符串 to_char(numeric '-125.8', '999D99S')
to_date(text, text) date 把字符串转换为 date to_date('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(text, text) date 把字符串转换为 timestamp to_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text) numeric 把字符串转换为 numeric to_number('12,454.8-', '99G999D9S')


表 5.8. 用于日期/时间转换的模板

模板 描述
HH 小时(01-12)
HH12 小时(01-12)
HH24 小时(00-23)
MI 分钟(00-59)
SS 秒(00-59)
SSSS 自午夜以来的秒数(0-86399)
AM or A.M. or PM or P.M. 大写形式的上午/下午指示符
am or a.m. or pm or p.m. 小写形式的上午/下午指示符
Y,YYY 年份(4 位或更多数字)带逗号
YYYY 年份(4 位或更多数字)
YYY 年份的最后 3 位数字
YY 年份的最后 2 位数字
Y 年份的最后一位数字
BC or B.C. or AD or A.D. 大写形式的纪元指示符
bc or b.c. or ad or a.d. 小写形式的纪元指示符
MONTH 全大写的月名(9 个字符)
Month 首字母大写的月名全称(9 个字符)
month 全小写的月名(9 个字符)
MON 缩写的全大写月名(3 个字符)
Mon 缩写的首字母大写月名(3 个字符)
mon 缩写的全小写月名(3 个字符)
MM 月(01-12)
DAY 全大写的星期名(9 个字符)
Day 首字母大写的星期名全称(9 个字符)
day 全小写的星期名(9 个字符)
DY 缩写的全大写星期名(3 个字符)
Dy 缩写的首字母大写星期名(3 个字符)
dy 缩写的全小写星期名(3 个字符)
DDD 一年中的第几天(001-366)
DD 月中的日(01-31)
D 星期几(1-7;SUN=1)
W 月内的周
WW 一年中的周序号
CC 世纪(2 位数字)
J 儒略日(自公元前 4712 年 1 月 1 日以来的天数)
Q 季度
RM 以大写罗马数字表示的月份(I-XII;I=一月)
rm 以小写罗马数字表示的月份(I-XII;I=一月)


所有模板都允许使用前缀和后缀修饰符。前缀修饰符(如 FM)对其后紧跟的模板有效;后缀修饰符(如 TH)亦然。FX 前缀是一个全局修饰符。

表 5.9. 用于日期/时间 to_char() 的模板后缀

后缀 描述 例子
FM 填充模式前缀 FMMonth
TH 大写序数后缀 DDTH
th 小写序数后缀 DDTH
FX 固定格式全局选项(见下文) FX Month DD Day
SP 拼写模式(尚未实现) DDSP


用法说明:

  • 如果不使用 FX 选项, to_timestamp 和 to_date 会跳过空白。FX 必须指定为 模板中的第一项。

  • 反斜杠("\")必须写成双反斜杠 ("\\");例如 '\\HH\\MI\\SS'。

  • 引号之间的双引号('"')会被跳过而不解析。 如果想在输出中写双引号,必须在它前面加双反斜杠('\\"), 例如 '\\"YYYY Month\\"'。

  • to_char 支持不带前导 双引号('"')的文本,但引号之间的任何字符串 都会被快速处理,可以保证 它不会被解释为模板 关键字(例如:'"Hello Year: "YYYY')。

表 5.10. to_char(numeric) 的模板

模板 描述
9 具有指定位数的值
0 带前导零的值
.(句点) 小数点
,(逗号) 组(千位)分隔符
PR 尖括号中的负值
S 带负号的负值(使用区域设置)
L 货币符号(使用区域设置)
D 小数点(使用区域设置)
G 组分隔符(使用区域设置)
MI 指定位置上的负号(若数字 < 0)
PL 指定位置上的正号(若数字 > 0)
SG 指定位置上的正/负号
RN 罗马数字(输入在 1 和 3999 之间)
TH or th 转换为序数
V 移动 n 位数字(见注释)
EEEE 科学计数法。现在不支持。


用法说明:

  • 使用 SG、PL 或 MI 格式化的符号不是 数字中的锚点;例如, to_char(-12, 'S9999') 产生 ' -12', 但 to_char(-12, 'MI9999') 产生 '- 12'。 Oracle 实现不允许在 9 前面使用 MI,而是要求 9 在 MI 之前。

  • PL、SG 和 TH 是 Postgres 扩展。

  • 9 指定一个位数与 9 的个数相同的值。如果没有 可用数字则使用空格。

  • TH 不转换小于零的值, 也不转换十进制数。TH 是 Postgres 扩展。

  • V 实际上把输入值乘以 10^n,其中 n 是 V 后面的数字个数。 to_char 不支持 V 与小数点组合使用 (例如不允许 "99.9V99")。

表 5.11. to_char 示例

输入 输出
to_char(now(),'Day, HH12:MI:SS') 'Tuesday , 05:39:18'
to_char(now(),'FMDay, HH12:MI:SS') 'Tuesday, 05:39:18'
to_char(-0.1,'99.99') ' -.10'
to_char(-0.1,'FM9.99') '-.1'
to_char(0.1,'0.9') ' 0.1'
to_char(12,'9990999.9') ' 0012.0'
to_char(12,'FM9990999.9') '0012'
to_char(485,'999') ' 485'
to_char(-485,'999') '-485'
to_char(485,'9 9 9') ' 4 8 5'
to_char(1485,'9,999') ' 1,485'
to_char(1485,'9G999') ' 1 485'
to_char(148.5,'999.999') ' 148.500'
to_char(148.5,'999D999') ' 148,500'
to_char(3148.5,'9G999D999') ' 3 148,500'
to_char(-485,'999S') '485-'
to_char(-485,'999MI') '485-'
to_char(485,'999MI') '485'
to_char(485,'PL999') '+485'
to_char(485,'SG999') '+485'
to_char(-485,'SG999') '-485'
to_char(-485,'9SG99') '4-85'
to_char(-485,'999PR') '<485>'
to_char(485,'L999') 'DM 485
to_char(485,'RN') ' CDLXXXV'
to_char(485,'FMRN') 'CDLXXXV'
to_char(5.2,'FMRN') V
to_char(482,'999th') ' 482nd'
to_char(485, '"Good number:"999') 'Good number: 485'
to_char(485.8,'"Pre-decimal:"999" Post-decimal:" .999') 'Pre-decimal: 485 Post-decimal: .800'
to_char(12,'99V999') ' 12000'
to_char(12.4,'99V999') ' 12400'
to_char(12.45, '99V9') ' 125'


提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。