Jeśli start_date
ma wartość NULL, nie jest zgłaszany żaden wyjątek.
select to_date( null, 'mm/dd/yyyy' )
from dual
jest doskonale poprawną instrukcją SQL, która zwraca NULL.
Otrzymywany błąd wyraźnie wskazuje, że przynajmniej niektóre wiersze w start_date
kolumny nie są w rzeczywistości ciągami w oczekiwanym formacie lub które są mapowane na nieprawidłowe daty (np. ciąg „13/35/2007”). Możesz napisać funkcję, która testuje, aby sprawdzić, czy ciąg może zostać przekonwertowany na datę, i zwraca albo przekonwertowaną datę, albo wartość NULL. Możesz wtedy użyć tego zamiast 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;
a następnie użyj my_to_date
zamiast to_date
. To powinno wyeliminować błąd, który otrzymujesz. Jednak prawdopodobnie będziesz chciał wyczyścić dane, aby pozbyć się nieprawidłowych ciągów.