改变我的oracle NLS_Lang环境

时间:2015-07-24 16:00:22

标签: oracle datetime oracle-sqldeveloper nls-lang

我需要格式化包含缩写字符串的日期字符串。 我尝试过:

to_date('Fri  Jul 24', 'DY MON DD')

它不起作用,我想是因为我的oracle NLS参数设置为法语我不明白为什么:

SELECT * FROM V$NLS_PARAMETERS
----------------------
NLS_LANGUAGE                FRENCH
NLS_TERRITORY               FRANCE
NLS_CURRENCY                €
NLS_ISO_CURRENCY            FRANCE
NLS_NUMERIC_CHARACTERS      , 
NLS_CALENDAR                GREGORIAN
NLS_DATE_FORMAT             DD/MM/RR
NLS_DATE_LANGUAGE           FRENCH
NLS_CHARACTERSET            AL32UTF8
NLS_SORT                    FRENCH
NLS_TIME_FORMAT             HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT        DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT          HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT     DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY           €
NLS_NCHAR_CHARACTERSET      AL16UTF16
NLS_COMP                    BINARY
NLS_LENGTH_SEMANTICS        BYTE
NLS_NCHAR_CONV_EXCP         FALSE

当然,我测试了法语转换:

to_date('Vendredi  Juillet 24', 'DAY MONTH DD')

这很有效。然后我尝试了缩写版本:

to_date('Ven  Jui 24', 'DY MON DD')

哪个不起作用。

无论如何,我对英语转换感兴趣,所以我应该首先将我的NLS从法语转换为英语。我怎么做? 我按照以下链接执行了这些步骤:http://docs.oracle.com/cd/E12102_01/books/AnyInstAdm784/AnyInstAdmPreInstall18.html,但没有任何成功。 有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果您想要更改,请参阅此链接 - 首先了解它们的工作方式 - NLS参数: http://docs.oracle.com/cd/E11882_01/server.112/e10729/ch3globenv.htm#i1005949

  

可以通过以下方式指定NLS参数:

  1. 作为服务器上的初始化参数
  2.   

    您可以在初始化参数文件中包含参数以指定默认会话NLS环境。 这些设置对客户端没有影响;他们只控制服务器的行为。例如:

                      NLS_TERRITORY = "CZECH REPUBLIC"
    
      

    <强> 2。作为客户端上的环境变量

         

    您可以使用NLS环境变量(可能与平台相关)为客户端指定与语言环境相关的行为,并覆盖在初始化参数文件中为会话设置的默认值。例如,在UNIX系统上:

                      % setenv NLS_SORT FRENCH
    
      

    第3。使用ALTER SESSION语句

         

    您可以使用在ALTER SESSION语句中设置的NLS参数来覆盖在初始化参数文件中为会话设置的默认值,或者由客户端使用环境变量设置的默认值。

                    ALTER SESSION SET NLS_SORT = FRENCH;
    
      

    <强> 4。在SQL函数中

         

    您可以显式使用NLS参数来对SQL函数中的NLS行为进行硬编码。此实践将覆盖在初始化参数文件中为会话设置的默认值,为具有环境变量的客户端设置的默认值,或者通过ALTER SESSION语句为会话设置的默认值。例如:

             TO_CHAR(hiredate, 'DD/MON/YYYY', 'nls_date_language = FRENCH')
    

    请注意客户端上的会话NLS参数(不是服务器参数)决定转换在SQL语句中的工作方式。客户端可以从服务器派生自己的NLS参数,但不必这样做。例如,在SQL Developer中,您可以在Tools / Preferences / Database / NLS选项下的菜单中设置会话的NLS参数,但默认设置通常来自您的PC(例如,从MS-Windows语言设置或NLS_LANG环境变量,如果存在)。
    每个客户都有自己特定的方法来设置这些参数,您必须参考客户的文件。

    这是有道理的,因为例如想象服务器位于法国并且有NLS设置='法国',但第一个客户端是连接美国,第二个客户端来自挪威 - 第一个客户想看美国日期,所以它在其客户端上将NLS参数设置为NLS ='America。第二个客户端将其语言设置设置为NLS ='Norway“,它以本地approtirate格式查看日期。


    您始终可以使用ALTER SESSION命令在会话中更改NLS设置,无论客户端如何。

答案 1 :(得分:1)

缩写的法语形式为Ven. Juil. 24,句点似乎是不可分割的。

您可以通过提供可选的第三个参数来更改TO_DATE和TO_CHAR函数的日期语言,例如:

to_char(sysdate,'Dy Mon dd','NLS_DATE_LANGUAGE = FRENCH')
to_char(sysdate,'Dy Mon dd','NLS_DATE_LANGUAGE = AMERICAN')