You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

这个思路是:

  1. FM99999990D99保证前置0不丢失,比如0.22能正常输出
  2. TRIM(TRAILING '.' FROM ...)把整数后面的多余小数点去掉,比如把123.改成123

测试效果

针对你提到的三个值:

  • 原数值0,22 → 输出0.22
  • 原数值123 → 输出123
  • 原数值15,55 → 输出15.55

内容的提问来源于stack exchange,提问作者eloweyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:30:03