在 Oracle 中转换为具有多个可能掩码的日期
题
碰巧我必须从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 ....
不隶属于 StackOverflow