sql >> Base de Datos >  >> RDS >> Oracle

Oracle:evitar el valor NULL en to_date

Si start_date es NULL, no se lanza ninguna excepción.

select to_date( null, 'mm/dd/yyyy' ) 
  from dual

es una declaración SQL perfectamente válida que devuelve NULL.

El error que está recibiendo implica fuertemente que al menos algunas de las filas en start_date columna no son en realidad cadenas en el formato esperado o que se asignan a fechas no válidas (es decir, la cadena '35/13/2007'). Puede escribir una función que compruebe si una cadena se puede convertir en una fecha y devolver la fecha convertida o un valor NULL. Luego puede usar eso en lugar 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;

y luego use my_to_date en lugar de to_date . Eso debería eliminar el error que está recibiendo. Sin embargo, probablemente querrá limpiar los datos para deshacerse de las cadenas no válidas.