Como dices que "no tienes acceso" a la base de datos, asumo que no puedes crear ninguna función para ayudarte con esto y que solo puedes ejecutar consultas?
Si ese es el caso, entonces el siguiente código debería darle la mayoría de lo que necesita con las siguientes advertencias: 1) El formato de fecha almacenado que desea evaluar es 'mm/dd/aaaa'. Si este no es el caso, puede modificar el código para que se ajuste a su formato. 2) La base de datos no contiene fechas inválidas como el 30 de febrero.
En primer lugar, he creado mi mesa y prueba de datos de prueba:
create table test (x number, sdate varchar2(20));
insert into test values (1, null);
insert into test values (2, '01/01/1999');
insert into test values (3, '1999/01/01');
insert into test values (4, '01-01-1999');
insert into test values (5, '01/01-1999');
insert into test values (6, '01-01/1999');
insert into test values (7, '12/31/1999');
insert into test values (8, '31/12/1999');
commit;
Ahora, la consulta:
WITH dates AS (
SELECT x
, sdate
, substr(sdate,1,2) as mm
, substr(sdate,4,2) as dd
, substr(sdate,7,4) as yyyy
FROM test
WHERE (substr(sdate,1,2) IS NOT NAN -- make sure the first 2 characters are digits
AND to_number(substr(sdate,1,2)) between 1 and 12 -- and are between 0 and 12
AND substr(sdate,3,1) = '/' -- make sure the next character is a '/'
AND substr(sdate,4,2) IS NOT NAN -- make sure the next 2 are digits
AND to_number(substr(sdate,4,2)) between 1 and 31 -- and are between 0 and 31
AND substr(sdate,6,1) = '/' -- make sure the next character is a '/'
AND substr(sdate,7,4) IS NOT NAN -- make sure the next 4 are digits
AND to_number(substr(sdate,7,4)) between 1 and 9999 -- and are between 1 and 9999
)
)
SELECT x, sdate
FROM dates
WHERE to_date(mm||'/'||dd||'/'||yyyy,'mm/dd/yyyy') <= to_date('08/01/1999','mm/dd/yyyy');
Y mis resultados:
X SDATE
- ----------
2 01/01/1999
La declaración con la voluntad de hacer la mayor parte de la validación para asegurarse de que los valores de fecha estén al menos en el formato adecuado. Tuve que dividir cada unidad de tiempo mes/día/año para realizar la evaluación hasta la fecha porque aún recibía un error de mes no válido cuando hacía una fecha_hora en fecha.
Espero que esto ayude.
Bueno, está _supposed_ para almacenar las fechas en las columnas de FECHA. ¿Por qué no? –
Es esta aplicación heredada con la que trabajo en el trabajo. Usan cadenas porque de lo contrario las fechas son predeterminadas a la fecha actual ... No tengo control sobre el DB – ntsue
si tienes fechas en campos varchar2 (malas) y ni siquiera tienes un formato consistente, entonces puedes ser SOL (salvo reconstruir la tabla para convertir todos los formatos de char a un campo FECHA real) – tbone