1

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

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,但没有任何成功。任何想法?

4

2 回答 2

2

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


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


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

您可以在初始化参数文件中包含参数以指定默认会话 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 设置 = 'France',但第一个客户端从美国连接,第二个来自挪威 - 第一个客户端想要查看美国日期,所以它将客户端上的 NLS 参数设置为 NLS = 'America. 第二个客户端将其语言设置设置为 NLS = 'Norway" 并以本地适当格式查看日期。 无论客户端如何,您都可以使用命令


在会话中更改 NLS 设置。ALTER SESSION

于 2015-07-25T08:48:42.857 回答
1

The abbreviated French form is Ven. Juil. 24 the periods appear to be integral.

You can change the date language of the TO_DATE and TO_CHAR functions by supplying the optional 3rd argument e.g.:

to_char(sysdate,'Dy Mon dd','NLS_DATE_LANGUAGE = FRENCH')
to_char(sysdate,'Dy Mon dd','NLS_DATE_LANGUAGE = AMERICAN')
于 2015-07-24T18:14:48.077 回答