oracle - 十进制的 NLS_NUMERIC_CHARACTERS 设置

标签 oracle oracle11g oracle-sqldeveloper

我在测试机器上设置了一个数据库,在生产机器上设置了第二个数据库。当我运行时:

select to_number('100,12') from dual 

然后在测试机上就报错了。然而,这个语句在生产机器上工作得很好。

现在,当我检查 NLS_NUMERIC_CHARACTERS 时,我会在两台机器中看到“,”(逗号)。我还应该在其他地方寻找小数设置吗?

干杯!

最佳答案

您可以通过查询nls_session_parameters来查看当前的 session 设置:

select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';

VALUE                                  
----------------------------------------
.,                                       

这可能与数据库默认值不同,您可以在nls_database_parameters中看到。

在此 session 中您的查询错误:

select to_number('100,12') from dual;

Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 -  "invalid number"

我可以直接使用alter session来更改我的 session ,或者通过确保我的客户端配置方式能够实现字符串所需的设置(它可能是从操作系统或Java继承的)例如,语言环境):

alter session set NLS_NUMERIC_CHARACTERS = ',.';
select to_number('100,12') from dual;

TO_NUMBER('100,12')
-------------------
             100,12 

在 SQL Developer 中,您可以在“工具”->“首选项”->“数据库”->“NLS”中设置您的首选值。

但我也可以覆盖该 session 设置作为查询的一部分,并将可选的第三个 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 

默认情况下,结果仍然与我的 session 设置一起显示,因此小数点分隔符仍然是句点。

关于oracle - 十进制的 NLS_NUMERIC_CHARACTERS 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571355/

相关文章:

SQL:划分两列

oracle - HikariCP:为 Oracle 11g 设置 maxLifetime 时应考虑哪些数据库级别超时

sql - 根据日期范围将数据填充到表中

xml - 使用 Oracle XMLType 时处理空值

c# - 比较两个表中的数据,一个是Oracle,一个是SQL Server

delphi - 为什么通过 dbExpress 重新连接到 Oracle 数据库会导致访问冲突?

oracle-sqldeveloper - 在Oracle_sqldeveloper中是否有任何查询来查找表结构

sql 查询计算总和并添加前几行的总和

oracle - 使用 Oracle Sql Developer 生成 DDL 以包含外键

themes - 如何在 Oracle SQL Developer 中更改查询结果窗口的背景颜色?