如何在oracle SQL表中插入法语数字格式

时间:2015-12-30 09:40:28

标签: sql oracle

我面临的问题是在oracle的数字字段中插入法语号。我正在使用SQL Developer IDE。当我插入数字(比如3,4)时,它表示无效数字。具体地,

  

我不想将值3,4替换为3.4。

我也尝试更改 NLS设置(使用命令

Alter session set NLS_NUMERIC_CHARACTERS=','; 

如果我使用此命令,我可以直接在编辑器中插入但由于逗号而插入命令不起作用,Oracle假定它的另一个值。

任何帮助都将不胜感激。

2 个答案:

答案 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