我讀過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參考文章。
優秀的,謝謝:) – Centurion