оракул regex_replace для сохранения цифры и обратной косой черты - PullRequest
0 голосов
/ 31 мая 2018

У меня есть файл 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
    );

Я хочу использовать функцию регулярного выражения для очистки данных, которых нет в шаблоне даты.Спасибо за вашу помощь!

Ответы [ 4 ]

0 голосов
/ 31 мая 2018

Используйте шаблон ^[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

0 голосов
/ 31 мая 2018

Используйте следующее:

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 здесь

Удачи.

0 голосов
/ 31 мая 2018

Я склонен предоставить более зрелое регулярное выражение для соответствия действительным датам в формате 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

Вдохновлено

0 голосов
/ 31 мая 2018

Вы можете приблизиться с чем-то вроде:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...