[Oracle] TO_CHAR()函数

TO_CHAR() 是Oracle中极其重要的转换函数,主要用于将数值、日期或时间戳等数据类型转换为指定格式的字符串

语法格式

sql 复制代码
TO_CHAR(expression, format, nls_parameters)

参数说明

expression:要转换的表达式(数值、日期或时间戳)

format:指定输出字符串的格式模型(可选)

nls_parameters:指定国家语言支持参数(可选)

format参数常用格式元素

|----------|----------------|
| 格式元素 | 说明 |
| 9 | 数字位(不显示前导零) |
| 0 | 数字位(显示前导零) |
| . | 小数点 |
| D | 小数点 |
| , | 千位分隔符 |
| G | 千位分隔符 |
| $ | 美元货币符号 |
| MI | 在右侧显示负号 |
| PR | 将负数用尖括号<>括起来 |
| EEEE | 科学计数法 |
| YYYY | 年份数字(4位) |
| YEAR | 年份的英文拼写 |
| MM | 月份数字(01-12) |
| MONTH | 月份的全名 |
| DD | 一月中的第几天(01-31) |
| DAY | 星期的全名 |
| Q | 季度 |
| HH24 | 小时(00-23) |
| MI | 分钟(00-59) |
| SS | 秒(00-59) |
| FF | 毫秒(1-9位) |

数值转换字符串示例

sql 复制代码
SELECT TO_CHAR(0.123) FROM dual;  -- '.123'

SELECT TO_CHAR(1234.56) FROM dual;  -- '1234.56'

SELECT TO_CHAR(1234.56, '$9,999.99') FROM dual;  -- '$1,234.56'

SELECT TO_CHAR(123, '09999') FROM dual;  -- '00123'

SELECT TO_CHAR(123456789, '9.999EEEE') FROM dual;  -- '1.235E+08'

SELECT TO_CHAR(-1234.56, '9,999.99MI') FROM dual;  -- '1,234.56-'

SELECT TO_CHAR(-1234.56, '9,999.99PR') FROM dual;  -- '<1,234.56>'

SELECT TO_CHAR(1234.56, '9G999D99', 'NLS_NUMERIC_CHARACTERS='',.''')  -- '1.234,56'
FROM dual;

日期转换字符串示例

sql 复制代码
-- 假设当前日期是2025-08-04 11:17:16
SELECT TO_CHAR(SYSDATE,'YYYY') as nowYear FROM dual;  -- '2025'

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;  -- '2025-08-04'

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;  -- '2025-08-04 11:17:16'

SELECT TO_CHAR(SYSDATE, 'YEAR MONTH DAY') FROM dual;  -- 'TWENTY TWENTY-FIVE 8月  星期一'

SELECT TO_CHAR(SYSDATE, 'YYYY"年"Q"季度"') FROM dual;  -- '2025年3季度'

SELECT TO_CHAR(SYSDATE, '"今天是"YYYY"年"MM"月"DD"日"') FROM dual;  -- '今天是2025年08月04日'

SELECT TO_CHAR(SYSDATE, 'YYYY"年"MM"月"DD"日"', 'NLS_DATE_LANGUAGE=JAPANESE') -- 2025年08月04日
FROM dual;

时间戳转换为字符串示例

sql 复制代码
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3') FROM dual;  -- '2025-08-04 11:19:44.531'

SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF6') FROM dual;  -- '2025-08-04 11:19:44.614245'