Oracle 中的 TO_CHAR 函数详解
本文首次创作于 2025-04-26,最后更新于 2025-05-23,距离上次更新已经过了 11 天,文章内容可能已经过时。
Oracle 中的 TO_CHAR 函数详解
TO_CHAR 是 Oracle 数据库中最重要的数据类型转换函数之一,主要用于将日期或数字转换为指定格式的字符串。
基本语法
日期转字符串
TO_CHAR(date, [format_model], [nls_parameters])
数字转字符串
TO_CHAR(number, [format_model], [nls_parameters])
参数说明
日期格式化示例
常用日期格式元素
实际应用示例
-- 基本日期格式化
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM dual; -- 2023-07-25
SELECT TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS') FROM dual; -- 25/07/2023 14:30:45
-- 包含文本的格式化
SELECT TO_CHAR(SYSDATE, '"Today is" DAY, MONTH DD, YYYY') FROM dual;
-- Today is TUESDAY, JULY 25, 2023
-- 季度和周年格式化
SELECT TO_CHAR(SYSDATE, 'Q"季度" YYYY') FROM dual; -- 3季度 2023
SELECT TO_CHAR(SYSDATE, 'WW"周"') FROM dual; -- 30周
-- 中文环境格式化
SELECT TO_CHAR(SYSDATE, 'YYYY"年"MM"月"DD"日" DAY') FROM dual;
-- 2023年07月25日 星期二
-- 特殊fm:去除前导0
SELECT to_char(SYSDATE,'fmyyyy-mm-dd') FROM dual;
-- 2025-4-26 而不是2025-04-26
数字格式化示例
常用数字格式元素
实际应用示例
位数不足会显示#
-- 基本数字格式化
SELECT TO_CHAR(1234.56, '9999.99') FROM dual; -- 1234.56
SELECT TO_CHAR(1234.56, '9,999.99') FROM dual; -- 1,234.56
-- 货币格式化
SELECT TO_CHAR(1234.56, 'L999G999D99') FROM dual; -- $1,234.56
SELECT TO_CHAR(1234.56, 'C999G999D99', 'NLS_CURRENCY=¥') FROM dual; -- ¥1,234.56
-- 特殊格式
SELECT TO_CHAR(-1234, '9999PR') FROM dual; -- <1234>
SELECT TO_CHAR(0.45, '99.99%') FROM dual; -- 45.00%
-- 科学计数法
SELECT TO_CHAR(123456789, '9.999EEEE') FROM dual; -- 1.235E+08
-- 位数不足时
SELECT To_char(deptno,'0') FROM emp;
-- ##
高级用法
1. 多语言支持
-- 更改会话语言设置
ALTER SESSION SET NLS_DATE_LANGUAGE = 'FRENCH';
SELECT TO_CHAR(SYSDATE, 'DAY MONTH DD, YYYY') FROM dual;
-- MARDI JUILLET 25, 2023
ALTER SESSION SET NLS_DATE_LANGUAGE = 'GERMAN';
SELECT TO_CHAR(SYSDATE, 'DAY MONTH DD, YYYY') FROM dual;
-- DIENSTAG JULI 25, 2023
2. 条件格式化
SELECT product_name,
TO_CHAR(price, '999G999D00') ||
CASE WHEN price > 1000 THEN ' (高价)' ELSE ' (普通)' END AS price_info
FROM products;
3. 与 DECODE/CASE 结合
SELECT order_id,
TO_CHAR(order_date, 'YYYY-MM-DD') AS order_date,
TO_CHAR(amount, 'L999G999D99', 'NLS_CURRENCY=¥') AS amount,
DECODE(status, 'C', '已完成', 'P', '处理中', '其他') AS status_desc
FROM orders;
注意事项
格式匹配:格式模型必须与输入数据类型匹配(日期/数字)
性能考虑:大量数据转换时可能影响性能
NLS 依赖:某些格式元素依赖 NLS 参数设置
NULL 处理:输入为 NULL 时返回 NULL
溢出处理:数字格式过小会导致
###
显示
T O_CHAR 是 Oracle 数据展示和报表生成中最核心的函数之一,熟练掌握各种格式模型可以极大提高数据展示的灵活性。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Noah
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果