1

我读过 DATE 格式由在全局范围 (nls_database_parameters) 或会话范围 (nls_session_parameters) 定义的 NLS_DATE_FORMAT 设置控制。但是,我可以插入格式为“YYYY.MM.DD”的 DATE 值。这是一个插入:

INSERT INTO people (id, name, surname, birth) VALUES (11, 'John', 'Johny', '1979.02.23')

以下是来自 nls_database_parameters 的设置:

NLS_TERRITORY = AMERICA
NLS_DATE_FORMAT = DD-MON-RR
NLS_DATE_LANGUAGE = AMERICAN

以下是来自 nls_session_parameters 的设置:

NLS_TERRITORY = CANADA
NLS_DATE_FORMAT = RR-MM-DD
NLS_DATE_LANGUAGE = ENGLISH

假设,出生值在选择时显示为 'YY.MM.DD',因此 nls_session_parameters 优先。NSL_SESSION_Parameters 与 Windows XP 区域和语言设置中使用的设置有关。但是,不确定为什么当我使用 'YYYY.MM.DD' 插入时 Oracle 没有抱怨?

更新:似乎 NLS_DATE_FORMAT 被隐式设置为“RR.MM.DD”(不是 YY.MM.DD),并且 RR 年份格式允许插入全年。如果年份值以 RR 格式显示,那么 Oracle会舍入到 1950 到 2049 范围内的年份。因此,06 被认为是 2006 而不是 1906。另外,感谢全面的 paulsm4 参考文章。

4

1 回答 1

1

您在 init.ora 甚至会话中设置的 NLS_DATE_FORMAT 可以被其他因素覆盖。这是一个很好的链接,提供了更多详细信息:

于 2012-09-01T13:28:16.977 回答