【问题标题】:Why Oracle ignores NLS_DATE_FORMAT during insert?为什么 Oracle 在插入期间忽略 NLS_DATE_FORMAT?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-07-06
      • 2021-06-08
      • 2015-08-18
      • 2014-01-25
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      相关资源
      最近更新 更多