【问题标题】:oracle regex_replace to keep digit and backslashoracle regexp_replace 保留数字和反斜杠
【发布时间】:2018-05-30 23:10:40
【问题描述】:

我的 excel 文件在日期字段中包含一些垃圾数据。

日期格式为 1/2/2015 格式。我正在尝试将该文件加载到 varchar 字段中的阶段表中,并在加载到主表之前应用正则表达式替换函数来清理坏数据

谁能给我合适的表达方式

create table A
(
bad_date varchar2(4000)
);

insert into A
( bad_date)
values ('1/2/2005');
insert into A
( bad_date)
values ('indep');
insert into A
( bad_date)
values ('/');

commit;


 create table B
    (
    good_date date
    );

我想使用正则表达式函数来清理不在日期模式中的数据。感谢您的帮助!

【问题讨论】:

    标签: sql regex oracle date regexp-like


    【解决方案1】:

    使用^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4} 模式表示regexp_like 符合您的日期格式。

    使用以下 insert 语句获取干净的日期数据:

    insert into B
    select * from
    ( select to_date(bad_date,
               case when 
                 regexp_like(bad_date,'^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}') then 
                 'DD/MM/YYYY'
               end) dateConverted          
        from A)
    where dateConverted is not null;    
    

    SQL Fiddle Demo

    【讨论】:

      【解决方案2】:

      您可以通过以下方式接近:

      select (case when regexp(bad_date, '^[0-1]?[0-9]/[0-3]?[0-9]/[0-9]{4}$')
                   then to_date(bad_date, 'MM/DD/YYYY'
              end) as converted_date
      

      【讨论】:

        【解决方案3】:

        使用以下内容:

        INSERT INTO B (GOOD_DATE)
          SELECT TO_DATE(BAD_DATE, 'DD/MM/YYYY')
            FROM A
            WHERE REGEXP_LIKE(BAD_DATE, '[0-9]+/[0-9]+/[0-9]+')
        

        SQLFiddle here

        祝你好运。

        【讨论】:

          【解决方案4】:

          我倾向于贡献一个更成熟的正则表达式来匹配m/d/yyyy格式的有效日期:

          INSERT INTO B (GOOD_DATE)
            SELECT TO_DATE(BAD_DATE, 'DD/MM/YYYY')
              FROM A
              WHERE REGEXP_LIKE(BAD_DATE,
                      '^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/(19|20)[0-9][0-9]$'
              )
          

          SQLFiddle

          灵感来自

          【讨论】:

            猜你喜欢
            • 2019-12-05
            • 1970-01-01
            • 2020-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-25
            • 1970-01-01
            相关资源
            最近更新 更多