2012-09-01 56 views
1

我讀過DATE格式是由在全局範圍(nls_database_parameters)或會話範圍(nls_session_parameters)中定義的NLS_DATE_FORMAT設置控制的。但是,我可以插入格式爲'YYYY.MM.DD'的DATE值。下面是一個插入:從NLS_DATABASE_PARAMETERS爲什麼Oracle在插入期間忽略NLS_DATE_FORMAT?

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

下面是設置:

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 

由於supossed,出生值出現爲「YY.MM. DD'選擇時,所以nls_session_parameters優先。 NSL_SESSION_Parameters與Windows XP區域和語言設置中使用的設置有關。但是,不確定爲什麼Oracle在插入'YYYY.MM.DD'時不會抱怨?

UPDATE: 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參考文章。

回答