oracle regex_replace保持数字和反斜杠

时间:2018-05-30 23:10:40

标签: sql regex oracle date regexp-like

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

日期格式为1/2/2015格式。我试图将该文件加载到varchar字段中的stage表中,并在加载到主表之前应用regex replace函数来清理坏数据

我可以为我提供合适的表现吗

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
    );

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

4 个答案:

答案 0 :(得分:3)

您可以接近以下内容:

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

答案 1 :(得分: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

祝你好运。

答案 2 :(得分:3)

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

使用以下 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

答案 3 :(得分:2)

我倾向于提供更成熟的正则表达式来匹配const progressReducer = ( state = 0, action ) => { switch ( action.type ) { case INCREMENT_PROGRESS: return state + 1; case DECREMENT_PROGRESS: return Math.max( state - 1, 0 ); default: return state; } }; 格式的有效日期:

brew install ffmpeg

SQLFiddle

受启发