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

有帮助吗?

解决方案

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

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

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

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

其他提示

您需要枚举您想要支持的所有可能的格式 - 请记住有些格式是不明确的(例如是“10-11-2009”11 月 10 日还是 10 月 11 日?),因此您的代码必须偏向其中一个。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top