【问题标题】:Set NLSLANG without thousand seperator设置不带千位分隔符的 NLS_LANG
【发布时间】:2019-02-19 15:57:12
【问题描述】:

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

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

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

我该怎么做?

【问题讨论】:

  • 为什么不把 G 排除在格式模型之外?
  • @AlexPoole 老实说,我在某个地方找到了这个示例,尝试对其进行修改,但没有成功...

标签: oracle


【解决方案1】:

我认为您不能使用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)s(如果将表达式包装在 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

【讨论】:

    【解决方案2】:

    您不能没有定义组分隔符。 From the documentation NLS_NUMERIC_CHARACTERS 设置是“任何两个有效的数字字符”,因此您不能只设置其中一个而将另一个留空。 (使用一个空 character 仍然使用两个字符,并且不会做你想做的事,正如@Matthew 所展示的)。

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

    select to_char(15000000.05, '999999990D00', 'NLS_NUMERIC_CHARACTERS=,.') from dual;
    
    TO_CHAR(15000
    -------------
      15000000,05
    

    我在模型的开头添加了更多的 9,因为您的原始模型没有足够的数字占位符来表示值的大小,因此会返回哈希值而不是任何有用的东西。

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

    【讨论】:

      【解决方案3】:

      如果您的应用程序允许这样做,您可以通过更改 nls_territory 来获得想要的结果:

      alter session set nls_territory='America';
      select * from nls_session_parameters where parameter='NLS_NUMERIC_CHARACTERS';
      

      给:

      PARAMETER;VALUE 
      -------------------------
      NLS_NUMERIC_CHARACTERS;.,
      

      但是这个:

      alter session set nls_territory='France';
      select * from nls_session_parameters where parameter='NLS_NUMERIC_CHARACTERS';
      

      给:

      PARAMETER;VALUE 
      -------------------------
      NLS_NUMERIC_CHARACTERS;,
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 2016-01-16
        • 2023-03-22
        • 2018-05-11
        • 2021-04-19
        相关资源
        最近更新 更多