一、日期/时间格式化

1. 年份格式化

格式符 说明 示例(输入:2025-03-19)
YYYY 四位年份 2025
YY 两位年份 25
YEAR 年份全拼(英文) TWENTY TWENTY-FIVE
RR 两位年份(兼容跨世纪) 25

2. 月份格式化

格式符 说明 示例(输入:03月)
MM 两位月份(01-12) 03
MON 月份缩写(英文) MAR
MONTH 月份全拼(英文) MARCH

3. 日期/星期格式化

格式符 说明 示例(输入:2025-03-19)
DD 两位日期(01-31) 19
DAY 星期全拼(英文) WEDNESDAY
DY 星期缩写(英文) WED
D 一周中的第几天(1-7) 4(周日=1)

4. 时间格式化

格式符 说明 示例(输入:23:25:21)
HH24 24小时制小时(00-23) 23
HH12/HH 12小时制小时(01-12) 11
MI 分钟(00-59) 25
SS 秒(00-59) 21
AM/PM 上午/下午标识 PM

5. 组合格式示例

TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') → '2025-03-19 23:25:21'
TO_CHAR(SYSDATE, 'DY, MONTH DD, YEAR') → 'WED, MARCH 19, TWENTY TWENTY-FIVE'

二、数字格式化

1. 基础占位符

格式符 说明 示例(输入:1234.56)
9 数字占位(忽略前导零) 1235(四舍五入)
0 强制显示前导/后导零 001234.5600
. 小数点 1234.56
, 千位分隔符 1,234.56

2. 货币与符号

格式符 说明 示例(输入:1234.56)
$ 美元符号 $1234.56
L 本地货币符号 ¥1234.56(中文环境)
C 国际货币代码 USD 1234.56

3. 科学计数法与特殊格式

格式符 说明 示例(输入:0.007)
EEEE 科学计数法 7.00E-03
PR 负数括号表示 <1234.56>
S 显示正负号 +1234.56 / -1234.56

4. 组合格式示例

TO_CHAR(1234.56, '999,999.99') → '1,234.56'
TO_CHAR(-567, 'S9999PR') → '-567' 或 '<567>'

三、高级修饰符与后缀

1. 修饰符

  • FM:去除前导零或尾部空格
    TO_CHAR(03, 'FM09') → '3'(无前导零)
    
  • TH/SP:序数或拼写形式
    TO_CHAR(19, 'DDTH') → '19TH'  
    TO_CHAR(3, 'MMSP') → 'THREE'(需语言支持)
    

2. 语言本地化

  • 通过 NLS_DATE_LANGUAGE 参数控制月份/星期的语言:
    TO_CHAR(SYSDATE, 'MONTH', 'NLS_DATE_LANGUAGE=FRENCH') → 'MARS'(法语)
    

四、常见错误与避坑指南

1. 混淆分钟与月份

  • 错误:TO_CHAR(时间, 'HH24:mm:ss')mm 表示月份
  • 正确:TO_CHAR(时间, 'HH24:MI:ss') → 使用 MI 表示分钟。

2. 忽略大小写敏感

  • YYYY-MM-DD 是合法格式,而 yyyy-mm-dd 可能因数据库不同报错(Oracle 严格区分大小写)。

3. 多余空格或符号

  • 格式字符串中非占位符需用双引号包裹:
    TO_CHAR(SYSDATE, 'YYYY"年"MM"月"') → '2025年03月'