设置NLSLANG,不带千位分隔符

时间:2019-02-19 15:57:13

标签: oracle

我想更改nls_numeric_characters,以使我没有任何千位分隔符,而只有逗号作为十进制分隔符。

TO_CHAR(15000000.05,'99G990D00', 'NLS_NUMERIC_CHARACTERS = '',''')

给我一​​个错误“ SQL函数中使用了无效的NLS参数字符串”

我该怎么做?

2 个答案:

答案 0 :(得分:2)

我认为您不能使用NLS_NUMERIC_CHARACTERS来禁止组分隔符。这就是格式模型的用途。如果您不希望使用组分隔符,请不要在格式模型中要求使用它们。 NLS_NUMERIC_CHARACTERS所要做的就是在要求时指定组分隔符。

即使您使用CHR(0),如下所示:

select TO_CHAR(15000000.05,'999G999G990D00', 'NLS_NUMERIC_CHARACTERS = ,' || chr(0))
from dual
15000000,05

答案仍然嵌入了chr(0)(您可以查看是否将表达式包装在DUMP()函数中。

select DUMP(TO_CHAR(15000000.05,'999G999G990D00', 'NLS_NUMERIC_CHARACTERS = ,' || chr(0)))
from dual
Typ=1 Len=15: 32,32,49,53,0,48,48,48,0,48,48,48,44,48,53

答案 1 :(得分:0)

您无法定义组分隔符。 From the documentationNLS_NUMERIC_CHARACTERS设置为“任何两个有效数字字符”,因此您不能仅设置其中一个,而将另一个保留为空。 (使用空的 character 仍在使用两个字符,并且不执行您想要的操作,如@Matthew所示)。

如果您不想在字符串中使用组分隔符,只需从格式模型中将其省略:

select to_char(15000000.05, '999999990D00', 'NLS_NUMERIC_CHARACTERS=,.') from dual;

TO_CHAR(15000
-------------
  15000000,05

我在模型的开头增加了9个数字,因为您的原始版本没有足够的数字占位符来容纳值的大小,因此将返回散列值,而不是任何有用的值。

(列的宽度是格式模型的长度加上一个额外的空格以允许使用符号字符,并且字符串在该宽度处被左填充-保持多个值的右对齐。您可能会丢失填充通过添加FM修改器(如果您愿意)。