我想在oracle中使用掩码将字符串转换为数字,但我的问题是当我执行时:
SELECT TO_NUMBER('9.9' , '999G999G999G999G999G999G999D99', 'NLS_NUMERIC_CHARACTERS = '',.'' ') FROM dual;
我得到的结果是:99
但是这个结果还不错。正确的结果是9.9或Oracle应该显示一些错误 我该怎么办?
谢谢!
答案 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 = ''.,'' '
即可。