Sesuai dengan komentar Tony, Anda akan jauh lebih baik menyimpan tanggal di kolom DATE daripada memaksa alat kueri front-end untuk menemukan dan menangani pengecualian ini.
Namun, jika Anda terjebak dengan model data yang salah, opsi paling sederhana di versi sebelumnya adalah membuat fungsi yang melakukan konversi dan menangani kesalahan,
CREATE OR REPLACE FUNCTION my_to_date( p_date_str IN VARCHAR2,
p_format_mask IN VARCHAR2 )
RETURN DATE
IS
l_date DATE;
BEGIN
l_date := to_date( p_date_str, p_format_mask );
RETURN l_date;
EXCEPTION
WHEN others THEN
RETURN null;
END my_to_date;
Permintaan Anda kemudian akan menjadi
SELECT *
FROM myTable
WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}
Tentu saja, Anda kemungkinan besar menginginkan indeks berbasis fungsi pada MY_TO_DATE
panggilan untuk membuat kueri ini cukup efisien.
Di 12.2, Oracle telah menambahkan ekstensi ke to_date
dan cast
berfungsi untuk menangani konversi yang error
SELECT *
FROM myTable
WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}
Anda juga dapat menggunakan validate_conversion
berfungsi jika Anda mencari semua baris yang (atau bukan) tanggal yang valid.
SELECT *
FROM myTable
WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1