Проверка даты - непростая задача, которую вы не хотите выполнять вручную (вам необходимо учитывать переменное количество дней в месяце, не говоря уже о високосных годах).
К сожалению Postgres не имеет функции try_cast()
(как, например, в SQL Server или BigQuery): неудачное приведение является ошибкой.
Один из способов заключается в создании пользовательской функции:
create function try_cast_to_date(p_in text)
returns date
as $$
begin
begin
return $1::date;
exception
when others then return null;
end;
end;
$$
language plpgsql;
Затем вы можете использовать его в своем запросе:
select
eid,
ename,
(try_cast_to_date(dob) is not null) dobdateformatstatus,
(try_cast_to_date(doj) is not null) dojdateformatstatus
from mytable
Демонстрация на DB Fiddle :
eid | ename | dobdateformatstatus | dojdateformatstatus
--: | :---- | :------------------ | :------------------
1 | abc | t | t
2 | dx | f | t
3 | xy | t | f
4 | ji | f | f