3

碰巧我必须从 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,..)什么?

4

2 回答 2

4

不,但某些 Oracle 日期格式可以“容忍”差异,例如

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

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

因此,这可能会减少您需要处理的案件数量。我建议您按照您的想法编写一个函数,以便可以从代码中需要处理此类日期的所有位置调用它。

于 2009-12-18T14:04:41.973 回答
1

你需要列举所有你想支持的可能格式——记住有些是模棱两可的(例如“10-11-2009”11 月 10 日或 10 月 11 日?),所以你的代码必须优先考虑其中一个。

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

除了这些简化之外,您将需要一系列 BEGIN (format1) EXCEPTION WHEN OTHERS THEN BEGIN (format2) EXCEPTION WHEN WHEN OTHERS THEN BEGIN ....

于 2009-12-19T13:02:53.820 回答