Oracle - 字符串到双精度 - 动态缩放

联合开发中心

我的情况是,在数据库内部,各种双精度值都存储为字符串。
(由于某些其他原因,这无法更改!)

数字在小数点分隔符之后和之前可以有不同数量的数字。存储值
的小数点分隔符是 a数据库的默认小数点分隔符将来可能会更改。.

例子:

1.1  
111.1  
1.111  
11.11  
1.1111  

我现在需要选择这些作为数字,以便能够比较更大或更小的值等。

因此我尝试将字符串转换为数字。我在这个答案中找到了一个提示:点击

不幸的是,使用它作为测试:

SELECT TO_NUMBER('10.123', TRANSLATE('10.123', ' 1,234.567890', TO_CHAR(9999.9, '9G999D9') || '99999'))
FROM DUAL;

以某种方式将数字转换为10123,完全消除小数分隔,因此此查询没有结果(仅用于验证):

SELECT * FROM(SELECT TO_NUMBER('10.123', TRANSLATE('10.123', ' 1,234.567890', TO_CHAR(9999.9, '9G999D9') || '99999')) AS NUM
FROM DUAL) WHERE NUM < 11;

所以我逐一浏览了单个部分,看看我是否能找到错误:

SELECT TO_CHAR(9999.9, '9G999D9') FROM DUAL; -- 9.999,9

SELECT TO_CHAR(9999.9, '9G999D9') || '99999' FROM DUAL; -- 9.999,999999

SELECT TRANSLATE('10.123', ' 1,234.567890', ' 9.999,999999')
FROM DUAL; -- 99,999

SELECT TRANSLATE('10.123', ' 1,234.567890', TO_CHAR(9999.9, '9G999D9') || '99999')
FROM DUAL; -- 99,999

正如你所看到的,我得到了一个.作为组分隔符和一个,作为数据库的小数分隔符。


我不明白为什么它不能正确转换数字。
感谢您的帮助!

普利基

尝试使用这个版本to_number

TO_NUMBER( string1 [, format_mask] [, nls_language])

例如:

SELECT to_number('1.1111','9G990D00000', 'NLS_NUMERIC_CHARACTERS = ''.,''') FROM DUAL

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章