Ако start_date
е NULL, не се хвърля изключение.
select to_date( null, 'mm/dd/yyyy' )
from dual
е напълно валиден SQL израз, който връща NULL.
Грешката, която получавате, категорично предполага, че поне някои от редовете в start_date
колона всъщност не са низове във формата, който очаквате, или които съпоставят невалидни дати (т.е. низът „35/13/2007“). Можете да напишете функция, която тества дали даден низ може да бъде преобразуван в дата и да върне или преобразуваната дата, или NULL. След това можете да използвате това вместо 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;
и след това използвайте my_to_date
вместо to_date
. Това трябва да елиминира грешката, която получавате. Вероятно обаче ще искате да почистите данните, за да се отървете от невалидните низове.