在Oracle中使用多个可能的掩码转换为日期

时间:2009-12-18 13:53:01

标签: oracle plsql to-date

碰巧我必须从oracle中的varchar2列获取日期,但格式不一致。某些字段可能包含“2009.12.31”,其他字段可能包含“2009/12/32 00:00:00”。有没有我可以使用的标准构造,所以我不必经历

begin
  to_date(date, mask1)
exception
  begin
    to_date(date,mask2)
  exception
    ..
  end
end

块或先前的日期字符串分析来确定正确的掩码?像to_date(date, mask1,mask2,..)

这样的东西

2 个答案:

答案 0 :(得分:4)

不,但是一些Oracle日期格式是“宽容”的差异,例如。

SQL> select to_date('2009.12.31','YYYY/MM/DD') from dual;

TO_DATE('20
-----------
31-DEC-2009

这样可以减少您需要处理的案件数量。我建议你按照你想要的方式编写一个函数,这样就可以从代码中的所有地方调用它,你需要处理这样的日期。

答案 1 :(得分:1)

您需要枚举您想要支持的所有可能格式 - 请记住有些格式不明确(例如“10-11-2009”11月10日或10月11日?)因此您的代码必须优先于其他代码。

正如Tony所说,一些格式会接受各种输入,主要是解析分隔符和缺失位(例如'DD-MON-YYYY HH24:MI:SS'将匹配'31 -DEC-2009 10:30:00','31 / deC / 2009 10:30','2009年12月31日')。

除了这些简化之外,你还需要一系列的BEGIN(格式1)例外情况,然后开始等格式(格式2),等等等等等......