如何在非美国语言环境中使用 Oracle 中的 to_number 函数?
How to use to_number function in Oracle for non US locales?
我有数字 123.45
,但在葡萄牙语中,这实际上是 Oracle 当前在我们的环境中使用的语言环境,这个数字应该是 123,45
,所以当我尝试 运行
SELECT TO_NUMBER('123.45') FROM DUAL;
我收到 ORA-06512 错误。
用逗号替换点不是一个选项,因为除了看起来是一个 hacky 解决方案之外,oracle 驱动程序考虑了我的 java 应用程序区域设置并将其传递给 Oracle 数据库会话。
在这个函数中是否可以同时考虑点和逗号作为小数点分隔符?
您可以根据您的数据库版本尝试REFEXP、REPLACE 函数。有概念是 repalce 。 ,希望这会有所帮助。
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm
https://www.techonthenet.com/oracle/functions/regexp_replace.php
使用作为 TO_NUMBER
的第二个参数传递的 D
格式模型来表示会话当前十进制字符:
其中,如果你在 America/England/etc。那么你可以使用:
SELECT TO_NUMBER('123.45', '999D99') FROM DUAL;
并在 Portugal/Germany/etc.
SELECT TO_NUMBER('123,45', '999D99') FROM DUAL;
如果您想始终使用 .
,则在格式模型中明确使用 .
:
SELECT TO_NUMBER('123.45', '999.99') FROM DUAL;
或指定要用作 TO_NUMBER
函数的第三个参数的 NLS_NUMERIC_CHARACTERS
设置:
SELECT TO_NUMBER('123.45', '999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') AS value FROM DUAL;
db<>fiddle here
我有数字 123.45
,但在葡萄牙语中,这实际上是 Oracle 当前在我们的环境中使用的语言环境,这个数字应该是 123,45
,所以当我尝试 运行
SELECT TO_NUMBER('123.45') FROM DUAL;
我收到 ORA-06512 错误。
用逗号替换点不是一个选项,因为除了看起来是一个 hacky 解决方案之外,oracle 驱动程序考虑了我的 java 应用程序区域设置并将其传递给 Oracle 数据库会话。
在这个函数中是否可以同时考虑点和逗号作为小数点分隔符?
您可以根据您的数据库版本尝试REFEXP、REPLACE 函数。有概念是 repalce 。 ,希望这会有所帮助。
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm
https://www.techonthenet.com/oracle/functions/regexp_replace.php
使用作为 TO_NUMBER
的第二个参数传递的 D
格式模型来表示会话当前十进制字符:
其中,如果你在 America/England/etc。那么你可以使用:
SELECT TO_NUMBER('123.45', '999D99') FROM DUAL;
并在 Portugal/Germany/etc.
SELECT TO_NUMBER('123,45', '999D99') FROM DUAL;
如果您想始终使用 .
,则在格式模型中明确使用 .
:
SELECT TO_NUMBER('123.45', '999.99') FROM DUAL;
或指定要用作 TO_NUMBER
函数的第三个参数的 NLS_NUMERIC_CHARACTERS
设置:
SELECT TO_NUMBER('123.45', '999D99', 'NLS_NUMERIC_CHARACTERS=''.,''') AS value FROM DUAL;
db<>fiddle here