Đây là một ý tưởng tồi. duy nhất cách xác thực rằng một ngày là chính xác là cố gắng chuyển đổi nó thành một ngày. Nếu chuyển đổi không thành công thì đó không phải là một ngày; nếu nó thành công thì nó có thể thì là ở. Ngày tháng quá phức tạp để một ngôn ngữ thông thường có thể phân tích cú pháp.
Vì vậy, hãy tạo một hàm chuyển đổi nó thành ngày tháng; bạn có thể tạo ra nếu chung chung hơn nhiều so với những gì bạn có ở đây, vì vậy nó có thể được sử dụng lại cho các mục đích khác:
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;
Điều này trả về một ngày nếu nó có thể xác thực rằng ngày tháng và định dạng ngày trùng khớp, ngược lại trả về NULL nếu có bất kỳ lỗi nào. Khi đó, truy vấn của bạn sẽ trở thành:
select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null