ORACLE:使用掩码将字符串转换为数字

时间:2017-02-24 15:07:10

标签: sql oracle oracle11g

我想在oracle中使用掩码将字符串转换为数字,但我的问题是当我执行时:

​SELECT TO_NUMBER('9.9' , '999G999G999G999G999G999G999D99', 'NLS_NUMERIC_CHARACTERS = '',.'' ') FROM dual;

我得到的结果是:99

但是这个结果还不错。正确的结果是9.9或Oracle应该显示一些错误 我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:3)

问题是我们G视为千位分隔符。 Oracle没有这样想;它是一个分隔符,可以出现在数字的整数部分中的任何位置。将.设置为“千位”分隔符后,Oracle会将输入字符串(在您的情况下为9.9)并忽略.时出现的任何内容将其读作数字。所以你的9.9对Oracle来说真的意味着99。

剩下的真实问题是Oracle为什么忽略您的格式模型。我不知道 - 这可能是甲骨文大哥“猜你的意思”,即使它不完全是你所说的。它在许多其他情况下也是如此。

请注意

SELECT TO_NUMBER('9.9.7.9' , '999G999G999G999G999G999G999D99',
                       'NLS_NUMERIC_CHARACTERS = '',.'' ') FROM dual;

完美无缺,产生的数字为9979.

答案 1 :(得分:0)

问题出在'NLS_NUMERIC_CHARACTERS = '',.'' ',这意味着','是小数点的分隔符,'.'是组分隔符(在您的示例中为千位),根据documentation

只需将此替换为'NLS_NUMERIC_CHARACTERS = ''.,'' '即可。