为什么Oracle在插入期间忽略NLS_DATE_FORMAT?

时间:2012-09-01 13:21:49

标签: oracle

我读到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 rounds to a year in the range 1950 to 2049. Thus, 06 is considered 2006 instead of 1906。另外,感谢paulsm4引用的综合文章。

1 个答案:

答案 0 :(得分:1)

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