Oracle SQL:如何将逗号为小数分隔符的数字转为点分隔
解决Oracle SQL数值转点分隔符格式的问题
你用TO_CHAR时遇到的问题,根源是FM格式符和掩码的组合逻辑:
FM会去掉前导0,所以小于1的数会变成.22而非0.22- 掩码里的
D99会强制保留小数位占位,整数也会带出多余的小数点,导致123变成123.
方案一:分情况处理整数和小数
直接判断字段是否为整数,对应不同的格式掩码:
SELECT CASE WHEN FIELD_NAME = TRUNC(FIELD_NAME) THEN TO_CHAR(FIELD_NAME, 'FM99999999', 'NLS_NUMERIC_CHARACTERS=''.,''') ELSE TO_CHAR(FIELD_NAME, 'FM99999990D99', 'NLS_NUMERIC_CHARACTERS=''.,''') END AS FORMATTED_VALUE FROM YOUR_TABLE;
- 整数场景:用不带小数位的掩码,避免多出小数点
- 小数场景:用
0作为整数部分的末尾位,确保小于1的数能显示前置0(比如0.22)
方案二:用TRIM去掉多余小数点
不想写条件判断的话,可以先格式化再清理尾部的小数点:
SELECT TRIM(TRAILING '.' FROM TO_CHAR(FIELD_NAME, 'FM99999990D99', 'NLS_NUMERIC_CHARACTERS=''.,''')) AS FORMATTED_VALUE FROM YOUR_TABLE;
这个思路是:
FM99999990D99保证前置0不丢失,比如0.22能正常输出TRIM(TRAILING '.' FROM ...)把整数后面的多余小数点去掉,比如把123.改成123
测试效果
针对你提到的三个值:
- 原数值
0,22→ 输出0.22 - 原数值
123→ 输出123 - 原数值
15,55→ 输出15.55
内容的提问来源于stack exchange,提问作者eloweyn
相关产品推荐
相关产品推荐

