oracle中的TO_DATE函数是否需要严格的格式匹配

时间:2015-08-14 10:09:37

标签: sql oracle date to-date

我对to_date(char[,'format'[,nls_lang])功能感到困惑。假设函数中指定的格式与日期字符串相同,我假设to_date('31-DEC-1982','DD-MON-YYYY');?以上功能正常。当我使用to_date('31-DEC-1982','DD-MM-YYYY');时也可以正常工作,但日期字符串中的月份字段与格式中的月份字段不匹配。 所以我怀疑是否应该将指定的日期字符串和格式完全匹配以将其转换为Date对象。

由于

2 个答案:

答案 0 :(得分:1)

一般来说,是的,日期字符串和指定的格式应该匹配。但是,它适用于您的情况的原因是Oracle在某些情况下提供了替代格式匹配的灵活性。

摘自官方Oracle网站

  

如果日期时间格式元素与日期字符串中相应字符之间的匹配失败,则Oracle会尝试其他格式元素

Alternative Formats

因此,根据上表,您可以使用“MON”或“MONTH”代替“MM”。 同样地,您可以使用'YYYY'到位'YY'等

参考:

Oracle Format Matching

答案 1 :(得分:0)

无论您遵循何种格式,返回的对象都是date类型。 您可以通过创建虚拟表并显示表描述来测试它。 例如CREATE TABLE TEST AS( select to_date('31-DEC-1982','DD-MON-YYYY') dd from dual);

现在desc test;

结果将为dd date。 类似的将是另一种类型的结果。

但是,如果您使用SQL Developer,则日期将以确切的NLS格式显示,因为此处的设置适用。

tools->preferences->database->NLS