martes, 16 de octubre de 2012

Comparar fechas, sysdsate en oracle y curdate() en MySQL SQL

Hoy me encontré con un problema a la hora de crear un script en bash, un problema que conociendo más SQL y MySQL que oracle, me ha dado un par de quebraderos de cabeza.

Pues bien el script era algo parecido a esto.

where fechainsert='2012-10-16'
Es decir que como consulta podías pasarle directamente el día, pero como estamos hablando de crear un script que la intención es que se ejecute varias veces al día y que según pase los días cambie, vamos que coga la fecha del sistema.
Yo conozco SQL que sé que tiene una función muy bonita que es CURDATE() (current_date, la fecha de hoy). Pues en SQL el resultado es este.
mysql> select curdate(); 
--> 2012-10-16
 Podríamos ponerla tal que así.
where fechainsert=CURDATE()
Y teníando el resto de la consulta SQL funcionaría a la perfección. Pero hoy me ha tocado investigar en oracle,que bueno es un lenguaje SQL pero con sus particularidades, entre ellas que no puedes poner este último fragmentode código.

Bien hay muchas formas de hacerlo, y entre las funciones a usar hay dos.
sysdate
current_date

El problema que es que al hacer la consulta de estas funciones el resultado es la fecha con la hora.

SQL> select sysdate from dual;

SYSDATE
-------------------
16/10/2012 00:34:35




Por tanto si quieres coger información del día de hoy, con oracle tendrás un problema. Te va a coger la información del mismo momento en que lanzas la consulta, por tanto no te va a valer de nada recopilar información del día.

Bueno habrá formas y formas de solucionarlo, buscando por ahí encontré como modificar el sysdate y puse esto.

where to_char(fechainsert,'yyyy-mm-dd')=to_char(sysdate, 'YYYY-MM-DD')

Con esto terminas por tener el where que necesitas para la comparación de dos fechas.

No es muy estético, no es muy bueno usar to_char, pero a mí saco del paso.

No hay comentarios:

Publicar un comentario