Ах, старые добрые VARCHAR2
даты ... и радость, которая с ними приходит.
Один из вариантов - создать функцию, которая попытается преобразовать эти значения в даты. Если получится - нормально, все нормально. В противном случае это не так. Например:
SQL> create or replace function f_datum_ok_01 (par_datum in varchar2) return number
2 is
3 l_datum date;
4 begin
5 l_datum := to_date(par_datum,
6 'dd-mon-yyyy hh24:mi:ss',
7 'nls_date_language = english');
8 return 1;
9 exception
10 when others then
11 return 0;
12 end f_datum_ok_01;
13 /
Function created.
Тестирование:
SQL> select datum, f_datum_ok_01(datum) from test;
DATUM F_DATUM_OK_01(DATUM)
------------------------------ --------------------
0201-05-31 00:00:00 0
31-May-2019 00:00:00 1
TEXT 0
15-May-2019 00:00:00 1
01-Apr-2019 00:00:00 1
01-Apr-2019 1
6 rows selected.
SQL>
Строки, для которых функция возвращает 1
приемлемы.
- Недостаток: может быть медленным для больших количество данных (переключение контекста).
- Преимущество: вы можете добавлять другие допустимые форматы и также принимать эти значения.