Me doy cuenta de que hace mucho que no escribo nada por aquí. De igual manera he visto que no doy nunca un monográfico sobre algo.
Bueno, todo eso cambia hoy, mi primer monográfico es sobre el uso de las fechas dentro de Oracle
Lo primero que se tiene que conocer son los rangos máximos por lo que se puede mover uno, el tramo por el que nos podemos mover es el comprendido entre el -4713 AC hasta el 9999DC
Una manera muy sencilla de conseguir extraer la fecha seria con el comando:
SELECT sysdate FROM dual;
Con el uso de la función ADD_MONTHS podemos añadir o quitar meses a una fecha dada.
SELECT ADD_MONTHS(sysdate,1) FROM dual;
La función ADD_MONTHS contiene dos parámetros, el primero hace referencia a una fecha dada, en mi caso uso sysdate pero se puede usar cualquier cosa. El segundo parámetro es el que nos definirá cuantos meses se avanzan o retroceden.
Con el uso de la función LAST_DAY podemos averiguar cual seria el ultimo día del mes que le pasemos como parámetro
SELECT LAST_DAY(sysdate) FROM dual;
Con la función NEXT_DAY podemos averiguar que día sera el próximo domingo o en que cayo el siguiente domingo de una fecha dada.
SELECT NEXT_DAY(sysdate,'domingo') FROM dual;
En este caso siempre me ha surgido una duda, por que la búsqueda depende muchísimo del entorno en el que se ejecuta, por que vamos que 'Sunday' es lo mismo en concepto que 'domingo' pero no se escribe igual y la búsqueda se esta haciendo con un string. Motivo por el que no recomiendo el uso de esta característica si no se esta seguro que la base de datos siempre va a estar en un mismo idioma o en caso contrario se pueda tener este string lo suficientemente controlado como para que se cambie inmediatamente
Con la función MONTHS_BETWEEN podemos comprobar los meses que transcurren entre dos fechas determinadas.
SELECT months_between('3/06/08','5/01/09') FROM dual;
En este caso tenemos que tener cuidado de que la primera fecha sea siempre inferior a la segunda
Con la función TRUNC nos dirá el primer día correspondiente a lo que le pasemos en el segundo parámetro
SELECT trunc(sysdate,'year') FROM dual;
Con el mes, devolvería el primer día del mes y con el día el primer día de la semana
Con la función ROUND nos redondeara las fechas de igual manera que lo puede hacer con los numeros.
SELECT round(sysdate,'year') FROM dual;
Con la función CURRENT_DATE podremos observar la fecha actual.
SELECT CURRENT_DATE FROM dual;
Con la función SYSTIMESTAMP podremos observar la fecha actual, seria igual que la anterior función pero en este caso nos devuelve todos los datos.
SELECT SYSTIMESTAMP FROM dual;
Devuelve todo el formato de la fecha (20/06/11 12:41:33,296000 +01:00)
Con la función EXTRACT podremos extraer un dato de la fecha
SELECT extract(year FROM date '1998-03-07') FROM dual;
Podemos sustituir year por month o day.
También podemos obtener horas, minutos o segundos de la misma forma
SELECT extract(hour FROM time '06:07:04') FROM dual;