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

¿Cómo manejar las excepciones to_date en una declaración SELECT para ignorar esas filas?

Haciéndose eco del comentario de Tony, sería mucho mejor almacenar fechas en columnas DATE en lugar de forzar una herramienta de consulta de front-end para encontrar y manejar estas excepciones.

Sin embargo, si tiene un modelo de datos incorrecto, la opción más simple en versiones anteriores es crear una función que realice la conversión y maneje el error,

CREATE OR REPLACE FUNCTION my_to_date( p_date_str IN VARCHAR2,
                              p_format_mask IN VARCHAR2 )
  RETURN DATE
IS
  l_date DATE;
BEGIN
  l_date := to_date( p_date_str, p_format_mask );
  RETURN l_date;
EXCEPTION
  WHEN others THEN
    RETURN null;
END my_to_date;

Su consulta se convertiría entonces en

SELECT * 
  FROM myTable
 WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}

Por supuesto, lo más probable es que desee un índice basado en funciones en el MY_TO_DATE llame para que esta consulta sea razonablemente eficiente.

En 12.2, Oracle ha agregado extensiones a to_date y cast funciones para manejar conversiones ese error

SELECT * 
  FROM myTable
 WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}

También podría usar validate_conversion función si está buscando todas las filas que son (o no son) fechas válidas.

SELECT *
  FROM myTable 
 WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1