Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle:Evitando o valor NULL em to_date


Se start_date é NULL, nenhuma exceção é lançada.
select to_date( null, 'mm/dd/yyyy' ) 
  from dual

é uma instrução SQL perfeitamente válida que retorna NULL.

O erro que você está recebendo implica fortemente que pelo menos algumas das linhas no start_date coluna não são realmente strings no formato que você espera ou que mapeiam para datas inválidas (ou seja, a string '13/35/2007'). Você pode escrever uma função que testa para ver se uma string pode ser convertida em uma data e retornar a data convertida ou um NULL. Você pode usar isso em vez de 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;

e, em seguida, use my_to_date em vez de to_date . Isso deve eliminar o erro que você está recebendo. Você provavelmente vai querer limpar os dados, no entanto, para se livrar das strings inválidas.