更改我的 oracle NLS_Lang 环境

Changing my oracle NLS_Lang environment

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

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 从法语转换为英语开始。我怎么做? 我遵循了 link: http://docs.oracle.com/cd/E12102_01/books/AnyInstAdm784/AnyInstAdmPreInstall18.html 中的那些步骤,但没有任何成功。 有什么想法吗?

缩写的法语形式是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')

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


NLS parameters can be specified in the following ways:


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

You can include parameters in the initialization parameter file to specify a default session NLS environment. These settings have no effect on the client side; they control only the server's behavior. For example:

                  NLS_TERRITORY = "CZECH REPUBLIC"

2. As environment variables on the client

You can use NLS environment variables, which may be platform-dependent, to specify locale-dependent behavior for the client and also to override the default values set for the session in the initialization parameter file. For example, on a UNIX system:

                  % setenv NLS_SORT FRENCH

3. With the ALTER SESSION statement

You can use NLS parameters that are set in an ALTER SESSION statement to override the default values that are set for the session in the initialization parameter file or set by the client with environment variables.

                ALTER SESSION SET NLS_SORT = FRENCH;

4. In SQL functions

You can use NLS parameters explicitly to hardcode NLS behavior within a SQL function. This practice overrides the default values that are set for the session in the initialization parameter file, set for the client with environment variables, or set for the session by the ALTER SESSION statement. For example:

         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 设置 = 'France',但是第一个客户端从美国连接,第二个从挪威连接 - 第一个客户端想要查看美国日期,因此它将其客户端上的 NLS 参数设置为 NLS = 'America.第二个客户端将其语言设置设置为 NLS = 'Norway",它会以本地适当的格式查看日期。


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