Това е лоша идея. Единственият начинът да потвърдите, че дадена дата е правилна, е да се опитате да я конвертирате в дата. Ако преобразуването е неуспешно, това не е дата; ако е успешно, тогава може бъда. Датите са твърде сложни, за да бъдат анализирани от обикновен език.
И така, създайте функция, която го преобразува в дата; можете да направите много по-общо, отколкото имате тук, така че след това да може да се използва повторно за други цели:
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;
Това връща дата, ако може да потвърди, че датата и форматът на датата съвпадат, в противен случай връща NULL, ако има грешка. Вашата заявка тогава става:
select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null