Dit is een slecht idee. De alleen manier om te valideren dat een datum correct is, is door te proberen deze om te zetten in een datum. Als de conversie mislukt, is het geen datum; als het succesvol is, dan misschien zijn. Datums zijn veel te complex voor een gewone taal om te ontleden.
Maak dus een functie die het omzet in een datum; je kunt het veel generieker maken dan je hier hebt, zodat het voor andere doeleinden kan worden hergebruikt:
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;
Dit retourneert een datum als het kan valideren dat de datum- en datumnotatie overeenkomen, anders wordt NULL geretourneerd als er een fout is. Uw vraag wordt dan:
select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null