九月 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表进行演示。

A) 将时间戳转换为字符串的示例
以下语句使用TO_CHAR()函数来格式化由小时、分钟和秒组成的付款日期:
SELECT
payment_date,
TO_CHAR(
payment_date,
'HH12:MI:SS'
) payment_time
FROM
payment
ORDER BY
payment_date;
结果如下:

B) 将整个时间戳值转换为不同格式的示例
以下示例将付款日期转换为不同的格式:
SELECT
payment_id,
payment_date,
TO_CHAR(
payment_date,
'MON-DD-YYYY HH12:MIPM'
) payment_time
FROM
payment
ORDER BY
payment_date;
输出是:

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;
下图说明了输出:

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()函数,将时间戳或数值转换为字符串。
了解更多
PostgreSQL 教程:字符串函数
PostgreSQL 文档:数据类型格式化函数