To zły pomysł. tylko sposobem sprawdzenia, czy data jest poprawna, jest próba przekonwertowania jej na datę. Jeśli konwersja się nie powiedzie, to nie jest data; jeśli się powiedzie, to może być. Daty są zbyt skomplikowane, aby można je było przeanalizować w zwykłym języku.
Stwórz więc funkcję, która konwertuje ją na datę; możesz zrobić, jeśli jest znacznie bardziej ogólny niż tutaj, dzięki czemu można go ponownie wykorzystać do innych celów:
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;
Zwraca datę, jeśli jest w stanie sprawdzić, czy format daty i daty jest zgodny, w przeciwnym razie zwraca NULL, jeśli wystąpi jakikolwiek błąd. Twoje zapytanie staje się wtedy:
select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null