我面临的问题是在oracle的数字字段中插入法语号。我正在使用SQL Developer IDE。当我插入数字(比如3,4)时,它表示无效数字。具体地,
我不想将值3,4替换为3.4。
我也尝试更改 NLS设置(使用命令
Alter session set NLS_NUMERIC_CHARACTERS=',';
如果我使用此命令,我可以直接在编辑器中插入但由于逗号而插入命令不起作用,Oracle假定它的另一个值。
任何帮助都将不胜感激。
答案 0 :(得分:4)
你不能而且你不需要。
SQL 文字的数字格式 需要小数分隔符的.
。
在列本身中,根本不存储小数点分隔符。您只需要更改数字的显示格式。理想情况下,这在您的应用程序中完成,在SQL级别上不。但是如果您在SQL输出中需要这个,请使用to_char()
格式化您的数字:
select to_char(your_number_column, '9999D99')
from your_table;
格式掩码中的D
将替换为当前会话的NLS设置定义的小数分隔符。
点.
和,
按字面意思返回:
select to_char(your_number_column, '9999,99')
from your_table;
有关to_char()格式掩码的更多详细信息,请参见手册:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements004.htm#BABIGFBA
答案 1 :(得分:2)
您的application / ide可能正在执行将字符数据隐式转换为数字,该数字使用会话默认的nls_numeric_characters。 您可以使用to_number:
强制insert命令执行如下的显式转换SQL> alter session set nls_language = ENGLISH;
Session altered
SQL> alter session set nls_numeric_characters = ',.';
Session altered
SQL> create table t1 (num_col number);
Table created
SQL> insert into t1 (num_col) values ('3.4');
insert into t1 (num_col) values ('3.4')
ORA-01722: invalid number
SQL> -- this is equivalent to:
SQL> insert into t1 (num_col) values (to_number('12345,678', '999999D999', 'NLS_NUMERIC_CHARACTERS=.,'));
insert into t1 (num_col) values (to_number('12345,678', '999999D999', 'NLS_NUMERIC_CHARACTERS=.,'))
ORA-01722: invalid number
SQL> -- now converting explictly
SQL> insert into t1 (num_col) values (to_number('12.345,678', '999999D999', 'NLS_NUMERIC_CHARACTERS=,.'));
1 row inserted
SQL> insert into t1 (num_col) values (to_number('12345,678', '999999D999', 'NLS_NUMERIC_CHARACTERS=,.'));
1 row inserted
在NLS_NUMERIC_CHARACTERS中,第一个字符是小数点分隔符,第二个字符是千位分组标记。
文档有更多信息: https://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_functions_2117.htm