Det er en dårlig idé. Den eneste måde at validere, at en dato er korrekt, er at forsøge at konvertere den til en dato. Hvis konverteringen mislykkes, er det ikke en dato; hvis det lykkes, så måske det være. Datoer er alt for komplekse til, at et almindeligt sprog kan parses.
Så opret en funktion, der konverterer den til en dato; du kan lave, hvis langt mere generisk, end du har her, så det kan derefter genbruges til andre formål:
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;
Dette returnerer en dato, hvis det er i stand til at validere, at dato- og datoformatet matcher, ellers returnerer NULL, hvis der er nogen fejl. Din forespørgsel bliver derefter:
select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null