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