Nếu start_date
là NULL, không có ngoại lệ nào được ném ra.
select to_date( null, 'mm/dd/yyyy' )
from dual
là một câu lệnh SQL hoàn toàn hợp lệ trả về NULL.
Lỗi bạn đang gặp phải ám chỉ rằng ít nhất một số hàng trong start_date
cột thực sự không phải là các chuỗi ở định dạng bạn mong đợi hoặc ánh xạ đến các ngày không hợp lệ (tức là chuỗi '13 / 35/2007 '). Bạn có thể viết một hàm để kiểm tra xem liệu một chuỗi có thể được chuyển đổi thành ngày và trả về ngày đã chuyển đổi hoặc NULL hay không. Sau đó, bạn có thể sử dụng nó thay vì to_date
.
CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2,
p_format IN VARCHAR2 )
RETURN DATE
IS
BEGIN
RETURN to_date( p_str, p_format );
EXCEPTION
WHEN OTHERS
THEN
RETURN NULL;
END;
và sau đó sử dụng my_to_date
thay vì to_date
. Điều đó sẽ loại bỏ lỗi bạn đang gặp phải. Tuy nhiên, có thể bạn sẽ muốn dọn dẹp dữ liệu để loại bỏ các chuỗi không hợp lệ.