PostgreSQL 教程: to_char 函数

九月 20, 2023

PostgreSQL 的TO_CHAR()函数将时间戳间隔整数、双精度或数值转换为字符串

目录

语法

下面说明了 PostgreSQL 的TO_CHAR()函数的语法:

TO_CHAR(expression, format)

参数

PostgreSQL 的TO_CHAR()函数需要两个参数:

1) 表达式

表达式可以是时间戳、间隔、整数、双精度或数值,它会按照特定格式转换为字符串。

2) 格式

结果字符串的格式。

下表说明了有效的数字格式字符串:

格式 描述
9 具有指定位数的数值
0 带有前导零的数值
.(点号) 小数点
D 区域相关的小数点
,(逗号) 分组(千)分隔符
FM 填充模式,抑制填充空白和前导零。
PR 尖括号中的负值。
S 锚定到区域相关的数字的符号
L 区域相关的货币符号
G 区域相关的分组分隔符
MI 对于小于 0 的数字,在指定位置添加负号。
PL 对于大于 0 的数字,在指定位置添加正号。
SG 指定位置的正号/负号
RN 罗马数字,范围从 1 到 3999
TH 或 th 大写或小写序数后缀

下表显示了有效的时间戳格式字符串:

模式 描述
Y,YYY 带逗号的年份,4 位数字
YYYY 4 位数字的年份
YYY 年份的最后 3 位数字
YY 年份的最后 2 位数字
Y 年份的最后 1 位数字
IYYY ISO 8601 周编号年份(4 位或更多位)
IYY ISO 8601 周编号年份的最后 3 位数字
IY ISO 8601 周编号年份的最后 2 位数字
I ISO 8601 周编号年份的最后 1 位数字
BC、bc、AD 或 ad 不带句点的纪元指示器
B.C.、b.c.、A.D. 或 a.d. 带句点的纪元指示器
MONTH 全大写的英文月份名称
Month 全首字母大写的英文月份名称
month 全小写的英文月份名称
MON 大写的月份缩写名称,例如 JAN、FEB 等。
Mon 首字母大写的月份缩写名称,例如 Jan、Feb 等。
mon 小写的月份缩写名称,例如 jan、feb 等。
MM 月份号从 01 到 12
DAY 全大写的日名
Day 首字母大写的日名
day 全小写的日名
DY 大写的缩写日名
Dy 首字母大写的缩写日名
dy 全小写的缩写日名
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 世纪,例如 21、22 等。
J 儒略日(自 UTC 时间公元前 4714 年 11 月 24 日午夜 起的整数天)
RM 大写的罗马数字月份 (I–XII; I=一月)
rm 小写的罗马数字月份 (i–xii; i=一月)
HH 一天中的小时(0 - 12)
HH12 一天中的小时(0 - 12)
HH24 一天中的小时(0 - 23)
MI 分钟(0 - 59)
SS 秒(0 - 59)
MS 毫秒(000 - 999)
US 微秒 (000000 - 999999)
SSSS 午夜后的秒数 (0 - 86399)
AM、am、PM 或 pm 正午指示器(无句点)
A.M.、a.m.、P.M. 或 p.m. 正午指示器(带句点)

返回值

TO_CHAR()函数返回一个TEXT数据类型的字符串,表示根据指定格式格式化第一个参数的结果值。

示例

我们将使用示例数据库中的payment表进行演示。

payment table

A) 将时间戳转换为字符串的示例

以下语句使用TO_CHAR()函数来格式化由小时、分钟和秒组成的付款日期:

SELECT
    payment_date,
    TO_CHAR(
        payment_date,
        'HH12:MI:SS'
    ) payment_time
FROM
    payment
ORDER BY
    payment_date;

结果如下:

PostgreSQL TO_CHAR Function - format timestamp example

B) 将整个时间戳值转换为不同格式的示例

以下示例将付款日期转换为不同的格式:

SELECT
    payment_id,
    payment_date,
    TO_CHAR(
        payment_date,
        'MON-DD-YYYY HH12:MIPM'
    ) payment_time
FROM
    payment
ORDER BY
    payment_date;

输出是:

img

C) 将时间戳文字转换为字符串示例

以下语句将时间戳文字转换为字符串:

SELECT
    TO_CHAR(
        TIMESTAMP '2017-08-18 22:30:59',
        'HH24:MI:SS'
    );

结果是:

22:30:59

D) 在金额中添加货币符号的示例

以下示例将美元符号添加到支付金额中:

SELECT
    payment_id,
    amount,
    TO_CHAR(
        amount,
        'l99999D99'
    ) amount_format
FROM
    payment
ORDER BY
    payment_date;

下图说明了输出:

PostgreSQL TO_CHAR Function - add currency symbol example

E) 将整数转换为字符串的示例

以下示例将整数转换为字符串:

SELECT
    TO_CHAR(
        2017,
        '9,999'
    );

结果

  2,017

F) 把它们放在一起的例子

以下示例将数字和时间戳转换为字符串:

SELECT
    first_name || ' ' || last_name 
    || ' paid ' || 
    TO_CHAR(
        amount,
        'l99D99'
    ) 
    || ' at ' || 
    TO_CHAR(
        payment_date,
        'HH24:MI:SS'
    )
    || ' on ' || 
    TO_CHAR(
        payment_date,
        'Mon-DD-YYYY'
    ) payment_info
FROM
    payment
INNER JOIN customer USING(customer_id)
ORDER BY
    rental_id;

结果是

PostgreSQL TO_CHAR Function - example

在本教程中,您学习了如何使用 PostgreSQL 的TO_CHAR()函数,将时间戳或数值转换为字符串。