Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Expressão regular de um formato de data específico


Esta é uma má ideia. O somente maneira de validar que uma data está correta é tentar convertê-la em uma data. Se a conversão falhar, não é uma data; se for bem-sucedido, poderá ser. As datas são muito complexas para uma linguagem regular analisar.

Então, crie uma função que converta em uma data; você pode torná-lo muito mais genérico do que aqui, para que possa ser reutilizado para outros fins:
create or replace function validate_date (
     PDate in varchar2
   , PDateFormat in varchar2
     ) return date is
begin
   return to_date(PDate, PDateFormat);
exception when others then
   return null;
end;

Isso retorna uma data se for capaz de validar que a data e o formato de data correspondem, caso contrário, retornará NULL se houver algum erro. Sua consulta então se torna:
select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null