加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle Date列清理

发布时间:2020-12-12 13:50:35 所属栏目:百科 来源:网络整理
导读:我有一个table1(DueDate varchar2(20)).它有数千种不同格式的日期数据和一些不良数据,如字符. 例如. YYYYMMDD,MM/DD/YYYY,MM-DD-YYYY,M/D/YYYY,'ABCD'YYYYMMD,YYYYMDD, 现在我必须得到过去一周过去的日期.我怎么做? 感谢您的帮助. 这是在字符字段中存储日期
我有一个table1(DueDate varchar2(20)).它有数千种不同格式的日期数据和一些不良数据,如字符.

例如.

YYYYMMDD,MM/DD/YYYY,MM-DD-YYYY,M/D/YYYY,'ABCD'
YYYYMMD,YYYYMDD,

现在我必须得到过去一周过去的日期.我怎么做?

感谢您的帮助.

这是在字符字段中存储日期信息是如此糟糕的原因之一.

最简单的选择是创建一个函数,尝试使用您拥有的任何优先级顺序(即01020 2003年1月2日或2001年2月3日或其他内容)将字符串转换为日期,并捕获异常.就像是

CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2 )
  RETURN DATE
IS
  l_date DATE;
BEGIN
  l_date := to_date( p_str,'YYYYMMDD' );
  RETURN l_date;
EXCEPTION
  WHEN others THEN
    BEGIN
      l_date := to_date( p_str,'MM/DD/YYYY' );
      RETURN l_date;
    EXCEPTION 
      WHEN others
      THEN
        RETURN null;
    END;
END;

有点像

SQL> CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2 )
  2    RETURN DATE
  3  IS
  4    l_date DATE;
  5  BEGIN
  6    l_date := to_date( p_str,'YYYYMMDD' );
  7    RETURN l_date;
  8  EXCEPTION
  9    WHEN others THEN
 10      BEGIN
 11        l_date := to_date( p_str,'MM/DD/YYYY' );
 12        RETURN l_date;
 13      EXCEPTION
 14        WHEN others
 15        THEN
 16          RETURN null;
 17      END;
 18  END;
 19  /

Function created.

SQL> select my_to_date( '19000101' ) from dual;

MY_TO_DAT
---------
01-JAN-00

SQL> ed
Wrote file afiedt.buf

  1* select my_to_date( '01/02/2005' ) from dual
SQL> /

MY_TO_DAT
---------
02-JAN-05

当然,您必须在代码中编写完整的有效日期格式代码,我只是处理列表中的前两个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读