PostgreSQL to_char() 函数使用指南

PostgreSQL to_char() 函数根据指定的格式将时间戳值、间隔值、数字值转为字符串并返回结果。

to_char() 语法

这是 PostgreSQL to_char () 函数的语法:

to_char(value, format TEXT) -> TEXT

参数

value
必需的。 一个要格式化输出为字符串的值。它可用于 TIMESTAMP, TIMESTAMPTZ, INTERVAL, INTEGER, BIGINT, NUMERIC, REAL, DOUBLE 等类型的值。
format

必需的。 转换这个值所采用的模板。模板由一些占位符和修饰符组成。占位符定义了输出字符串的格式,修饰符则对模板的行为做出一些改变。

日期/时间格式模板

您可以使用下表中的模板模式来构造日期/时间的格式模板。

模式 描述
HH 一天中的小时 (01–12)
HH12 一天中的小时 (01–12)
HH24 一天中的小时 (00–23)
MI 分钟 (00–59)
SS 秒 (00–59)
MS 毫秒 (000–999)
US 微秒(000000–999999)
FF1 十分之一秒 (0–9)
FF2 百分之一秒 (00–99)
FF3 毫秒 (000–999)
FF4 十分之一毫秒 (0000–9999)
FF5 百分之一毫秒 (00000–99999)
FF6 微秒(000000–999999)
SSSS, SSSSS 午夜过后几秒钟 (0–86399)
AM, am, PM, pm 上午、下午(无句点)
A.M., a.m., P.M., p.m. 上午、下午(带句点)
Y,YYY 年份(4 位或更多位数字),带逗号
YYYY 年份(4 位或更多数字)
YYY 年份的最后 3 位数字
YY 年份的最后 2 位数字
Y 年份的最后一位数字
IYYY ISO 8601 周编号年份(4 位或更多位)
IYY ISO 8601 周编号年份的最后 3 位数字
IY ISO 8601 周编号年份的最后 2 位数字
I ISO 8601 周编号年份的最后一位数字
BC, bc, AD, ad 公元前、公元后(无句点)
B.C., b.c., A.D., 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)
IDDD ISO 8601 周编号年份的一天(001–371;一年中的第 1 天是第一个 ISO 周的星期一)
DD 月中的某一天 (01–31)
D 星期几,星期日 (1) 到星期六 (7)
ID ISO 8601 星期几,星期一 (1) 到星期日 (7)
W 每月的一周 (1–5) (第一周从该月的第一天开始)
WW 一年中的周数 (1–53) (第一周从一年的第一天开始)
IW ISO 8601 周编号年份的周号(01–53;一年中的第一个星期四在第 1 周)
CC 世纪(2 位数字)(二十一世纪开始于 2001-01-01)
J 儒略历日期(自公元前 4714 年 11 月 24 日当地午夜以来的整数天)
Q 季度
RM 大写罗马数字形式的月份(I 到 XII; I 是 1 月)
rm 小写罗马数字形式的月份 (i 到 xii; i 是 1 月)
TZ 大写时区缩写(仅 to_char 支持)
tz 小写时区缩写(仅 to_char 支持)
TZH 时区小时
TZM 时区分钟
OF 时区与 UTC 的偏移量(仅 to_char 支持)

您可以将下表中的修饰符用于日期/时间模板模式。

修饰符 描述
FM 前缀 填充模式(抑制前导零和填充空白)
TH 后缀 序号后缀(大写)
th 后缀 序号后缀 (小写)
FX 前缀 固定格式全局选项(请参阅用法说明)
TM 前缀 翻译模式(根据 lc_time 使用本地化的日和月名称)

数字格式模板

您可以使用下表中的模板模式来构造数字格式字符串。

模式 描述
9 数字位置(如果无关紧要,可以丢弃)
0 数字位置(不会被删除,即使无关紧要)
. 小数点
, 组(千)分隔符
PR 尖括号中的负值
S 符号(使用区域设置)
L 货币符号(使用区域设置)
D 小数点(使用区域设置)
G 组分隔符(使用区域设置)
MI 指定位置的减号(如果数字 < 0)
PL 在指定位置加号(如果数字 > 0)
SG 指定位置的加号/减号
RN 罗马数字( 介于 1 和 3999 之间)
TH, th 序号后缀
V 移位指定的位数
EEEE 科学记数法的指数

您可以将下表中的修饰符用于数字格式字符串中。

修饰符 描述
FM 前缀 填充模式(抑制前导零和填充空白) FM99.99
TH 后缀 序号后缀(大写) 999TH
th 后缀 序号后缀(小写) 999th

返回值

PostgreSQL to_char() 函数返回一个字符串,它由指定的时间戳、间隔、或数字根据指定的格式转换而来。

to_char() 示例

本示例展示了如何使用 PostgreSQL to_char() 函数按照指定的格式输出一个时间戳值。

SELECT to_char(timestamp '2022-05-17 17:31:12.112', 'YYYY/MM/DD HH12:MI:SS');
       to_char
---------------------
 2022/05/17 05:31:12

本示例展示了如何使用 PostgreSQL to_char() 函数按照指定的格式输出一个日期值。

SELECT to_char(date '2022-05-17', 'YYYY/MM/DD');
  to_char
------------
 2022/05/17

本示例展示了如何使用 PostgreSQL to_char() 函数按照指定的格式输出一个间隔值。

SELECT to_char(interval '20 hours 20 minutes', 'HH24:MI:SS');
 to_char
----------
 20:20:00

本示例展示了如何使用 PostgreSQL to_char() 函数按照指定的格式输出一个数字。

SELECT to_char(12345678.9, '999G999G999G999G999.900');
         to_char
--------------------------
           12,345,678.900

因为,格式化字符串比数字长,因此,在输出的字符串的左侧添加了一些空格。如果您不需要这些前导空格,那你可以使用 FM 修饰符,比如:

SELECT to_char(12345678.9, 'FM999G999G999G999G999.900');
    to_char
----------------
 12,345,678.900