您可以通过查询nls_session_parameters查看您当前的会话设置:
select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE
----------------------------------------
.,
这可能与数据库默认值不同,您可以在 nls_database_parameters 中看到。
在此会话中您的查询错误:
select to_number('100,12') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
我可以更改我的会话,直接使用alter session 或确保我的客户端配置方式导致设置字符串需要(例如,它可能继承自操作系统或 Java 语言环境):
alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;
TO_NUMBER('100,12')
-------------------
100,12
在 SQL Developer 中,您可以在 Tool->Preferences->Database->NLS 中设置您的首选值。
但我也可以覆盖该会话设置作为查询的一部分,将可选的第三个 nlsparam 参数设置为to_number();虽然这使得可选的第二个 fmt 参数也是必需的,但您需要能够选择合适的格式:
alter session set NLS_NUMERIC_CHARACTERS = '.,';
select to_number('100,12', '99999D99', 'NLS_NUMERIC_CHARACTERS='',.''')
from dual;
TO_NUMBER('100,12','99999D99','NLS_NUMERIC_CHARACTERS='',.''')
--------------------------------------------------------------
100.12
默认情况下,我的会话设置仍然显示结果,因此小数分隔符仍然是句点。