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

Oracle JSON生成数字格式问题:如何无需to_char返回0.0133?

解决Oracle JSON输出省略前导零的问题

这个问题我之前也碰到过,Oracle默认的JSON数值格式化确实会省略小于1的正数的前导零,不过不用显式to_char也能搞定,有两个实用的方法:

方法一:调整会话级参数

Oracle 12.2及以上版本支持NLS_JSON_NUMERIC_FORMAT参数,它的默认值是'LAX'——这就是为什么你会得到.0133而不是0.0133的原因。把这个参数改成'STRICT',就能让JSON输出的数值强制保留前导零。

执行以下语句设置当前会话:

ALTER SESSION SET NLS_JSON_NUMERIC_FORMAT = 'STRICT';

之后再运行你的原查询,就能得到{"value":0.0133}了。这个设置仅对当前会话生效,如果需要全局生效,你可以修改数据库的初始化参数(需要相应权限)。

方法二:类型转换技巧

如果不想修改会话参数,也可以通过类型转换来实现。把目标数值转换成BINARY_FLOAT或BINARY_DOUBLE类型后,Oracle在序列化JSON时会自动保留前导零。示例查询如下:

select json_object( 'value' is CAST(0.0133 AS BINARY_FLOAT) format json strict) o from dual;

换成BINARY_DOUBLE也能达到同样的效果。

需要注意的是,你原查询里的FORMAT JSON STRICT是用来确保JSON语法合规的,它和数值的格式化规则没有关系,所以之前的设置不会影响前导零的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:21:24