Đối với ví dụ của bạn, bạn có thể sử dụng case
:
select (case when my_year is not null and my_year <> 0 and
my_year between -4713 and 9999
then TO_DATE(my_year || '-01-01', 'YYYY-MM-DD')
end)
Thật không may, Oracle không có phương pháp thực hiện chuyển đổi, nếu có thể và trả về NULL. SQL Server gần đây đã giới thiệu try_convert()
cho mục đích này.
Một tùy chọn là viết hàm của riêng bạn với một trình xử lý ngoại lệ cho việc chuyển đổi không thành công. Trình xử lý ngoại lệ sẽ chỉ trả về NULL
cho một định dạng xấu.