Ini adalah ide yang buruk. hanya cara untuk memvalidasi bahwa tanggal itu benar adalah dengan mencoba mengubahnya menjadi tanggal. Jika konversi gagal maka itu bukan tanggal; jika berhasil maka mungkin menjadi. Tanggal terlalu rumit untuk diuraikan dalam bahasa biasa.
Jadi, buat fungsi yang mengubahnya menjadi tanggal; Anda dapat membuatnya jika jauh lebih umum daripada yang Anda miliki di sini, sehingga dapat digunakan kembali untuk tujuan lain:
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;
Ini mengembalikan tanggal jika dapat memvalidasi bahwa tanggal dan format tanggal cocok, jika tidak mengembalikan NULL jika ada kesalahan. Permintaan Anda kemudian menjadi:
select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null