Oracle
 sql >> Database >  >> RDS >> Oracle

Espressione regolare di un formato data specifico

Questa è una cattiva idea. Il solo il modo per verificare che una data sia corretta è tentare di convertirla in una data. Se la conversione fallisce, non è una data; se ha successo, potrebbe essere. Le date sono troppo complesse per essere analizzate da una lingua normale.

Quindi, crea una funzione che la converta in una data; puoi renderlo molto più generico di quello che hai qui, quindi può essere riutilizzato per altri scopi:

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;

Questo restituisce una data se è in grado di verificare che la data e il formato della data corrispondano, altrimenti restituisce NULL in caso di errore. La tua richiesta diventa quindi:

select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null