To je špatný nápad. jediné způsob, jak ověřit, že datum je správné, je pokusit se jej převést na datum. Pokud se převod nezdaří, není to datum; pokud bude úspěšná, pak možná být. Data jsou příliš složitá na to, aby je běžný jazyk analyzoval.
Vytvořte tedy funkci, která jej převede na datum; můžete vytvořit, pokud je mnohem obecnější, než máte zde, takže jej lze znovu použít pro jiné účely:
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;
To vrátí datum, pokud je možné ověřit, že se datum a formát data shodují, jinak vrátí NULL, pokud dojde k nějaké chybě. Váš dotaz se poté změní na:
select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null