【发布时间】:2012-09-02 17:21:12
【问题描述】:
我读到 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 参考文章。
【问题讨论】:
标签: oracle