我读过 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 参考文章。