首页 > 解决方案 > Oracle SQL 查询 TO_DATE

问题描述

我对 Oracle SQL 中的以下查询有疑问:

SELECT TO_DATE('10-11-2015','DD-MM-YYYY') FROM DUAL;

当我运行它时,结果如下10-NOV-15。根据我在 Oracle 文档中阅读的内容,YYYY 应该转换为 4 位数年份,但它会转换为 2 位数年份。为什么会这样?

标签: sqloracledateselectoracle12c

解决方案


日期设置为 4 位数年份。

但是,您将使用 Oracle 当前用于在您的用户会话中显示日期的默认格式显示日期。Oracle 用于隐式日期转换的默认格式取决于地区。对于美国(除其他外)来说,这是DD-MON-RR并且将有一个两位数的年份;但对于瑞典,默认为RRRR-MM-DD4 位数的年份。

可以使用以下方式设置此格式:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';

因此,如果您将默认格式设置为YYYY-MM-DD(ISO-8601 日期格式),则使用:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

然后你的查询:

SELECT TO_DATE('10-11-2015','DD-MM-YYYY') FROM DUAL;

会输出2015-11-10

如果你想要一个特定的日期格式,那么你不应该依赖隐式转换,因为任何用户都可以在任何时候设置自己的格式,你不会得到一致的输出;相反,您应该使用显式转换:

SELECT TO_CHAR( TO_DATE('10-11-2015','DD-MM-YYYY'), 'DD-MM-YYYY' ) FROM DUAL;

会输出10-11-2015


推荐阅读