强制逗号作为脚本中的十进制分隔符,该脚本旨在在Oracle数据库的任何本地化上运行



我想为数字转换设置一个格式掩码,以便无论会话中设置了什么,都能将逗号"ALWAYS"作为十进制分隔符。换句话说,我的目标是强制这个格式掩码在Oracle数据库的任何本地化中始终获胜。

我的会话已设置

NLS_NUMERIC_CHARACTERS=',.'

当我发出这些命令时,我得到:

SELECT TO_CHAR( 100.34,'fm099999999999999D00') FROM DUAL;
000000000000100,34 -- as desired
SELECT TO_CHAR( 100.34,'fm099999999999999.00') FROM DUAL;
000000000000100,34 -- as desired
SELECT TO_CHAR( 100.34,'fm099999999999999,00') FROM DUAL;
000000000000001,00 -- NOT What I want!! because ',' is for thousands

有没有一种方法可以在不更改当前会话的情况下强制将"逗号"作为"十进制分隔符"?

使用第一个格式掩码,其中D表示十进制分隔符,然后将NLS_NUMERIC_CHARACTER作为最后一个显式参数传递给to_CHAR:

SQL> SELECT TO_CHAR( 100.34,'fm099999999999999D00') FROM DUAL;
TO_CHAR(100.34,'FM0
-------------------
000000000000100.34
1 row selected.
Elapsed: 00:00:00.15
SQL> SELECT TO_CHAR( 100.34,'fm099999999999999D00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
TO_CHAR(100.34,'FM0
-------------------
000000000000100,34

最新更新