数据库小白必看!5分钟搞懂to_char怎么用,掌握to_char函数,数据库新手5分钟速成指南
(一拍大腿)哎,你肯定遇到过这种情况吧?在数据库里查出来的日期显示成"20250101",或者工资数字挤成一坨没逗号分隔。这时候就该to_char这个神器出场啦!今天就带你从零开始,把这个函数玩出花来。
一、to_char是啥?为啥要学它?
举个栗子?,你去银行查余额,要是显示"1000000"和"1,000,000.00",哪个看着更舒服?to_char就是帮咱们把数据库里冷冰冰的数字、日期,变 *** 类看得懂的格式的翻译官。
它的基本语法长这样:

sql复制TO_CHAR(数字或日期, '格式模板' [, 本地化参数])
比如最简单的:
sql复制SELECT TO_CHAR(sysdate, 'YYYY-MM-DD') FROM dual; -- 输出类似"2025-05-03"
(这时候你可能会问)sysdate是啥?它就是Oracle自带的系统时间变量,相当于你手机的自动对时功能。
二、日期格式化:让乱码变清爽
2.1 基础招式
在网页里看到很多小伙伴被日期格式整懵了,咱们先记住这几个保命符:
- YYYY → 四位年份(2025)
- MM → 两位月份(05)
- DD → 两位日期(03)
- HH24 → 24小时制时间(23:59)
- MI → 分钟(注意不是MM!)
- SS → 秒
举个实战案例:
sql复制-- 把入职日期变成"2025年5月"SELECT TO_CHAR(hire_date, 'YYYY"年"MM"月"') FROM employees;
(敲黑板)这里有个坑!中文字符要用双引号包起来,不然数据库会以为你在写格式代码。
2.2 高级玩法
想搞点特别的?试试这些格式:
- DY → 星期缩写(SAT)
- Q → 季度(2)
- WW → 全年周数(18)
- Day → 全称星期(Saturday)
比如老板让你统计每周入职人数:
sql复制SELECT TO_CHAR(hire_date, 'DY'), COUNT(*)FROM employeesGROUP BY TO_CHAR(hire_date, 'DY');
三、数字变形记:给数据化个妆
3.1 基础整形
网页里有个超典型的案例:0.123直接转字符串会变成".123",前面少个零!这时候就要用格式模板来救场:
sql复制SELECT TO_CHAR(0.123, '0.999') FROM dual; -- 输出" 0.123"(注意前面有空格)SELECT TO_CHAR(0.123, 'FM0.999') FROM dual; -- 输出"0.123"
(恍然大悟)原来FM前缀是去空格神器!这个在生成报表时特别重要。
3.2 商务范儿格式
做财务系统必备这些格式:
- 9 → 数字占位符
- 0 → 强制补零
- , → 千位分隔符
- $ → 货币符号
- L → 本地货币符号
比如把工资格式化 *** 民币:
sql复制SELECT TO_CHAR(salary, 'L999G999G999D99') FROM employees;
假设salary是1234567.89,输出就是"¥1,234,567.89"。这里G是千位分隔符,D是小数点。
四、避坑指南:新手必看的血泪教训
格式模板对不上
(痛心疾首)见过有人把分钟写成MM吗?结果12:05变成12:05月!记住分钟是MI,月份才是MM。本地化陷阱
欧洲人写数字是1.000,00,美国人写1,000.00。这时候要用nlsparam参数:
sql复制SELECT TO_CHAR(1234.56, '999G999D99', 'NLS_NUMERIC_CHARACTERS=",."')FROM dual; -- 输出"1.234,56"
- 性能杀手
(严肃脸)在where条件里用to_char查日期,就像用计算器砸核桃——费力不讨好!应该先用to_date转好再比较。
五、个人私房技巧
- 动态格式
(神神秘秘)其实可以用case when动态选择格式:
sql复制SELECTCASE WHEN salary > 10000 THEN TO_CHAR(salary, '$999,999')ELSE TO_CHAR(salary, '99999')ENDFROM employees;
- 隐藏彩蛋
你知道吗?to_char还能做进制转换:
sql复制SELECT TO_CHAR(255, 'XX') FROM dual; -- 十进制转十六进制输出"FF"
(伸个懒腰)说到底,to_char就像数据界的PS软件——用得好能让你的报表立马高大上。不过记住啊,别在百万级数据里狂用格式化,毕竟数据库不是设计师,太多花活会影响性能。最后送大家一句话:格式千万条,需求第一条;模板不规范,上线两行泪!