Cómo obtener cuántos días hay entre dos fechas en Oracle.

Para obtener los días entre dos fechas a través de una sentencia Sql en Oracle podemos usar sencillamente la aritmética de tipos DATE (fecha) de esta base de datos. Para hacer esta operación los operandos deben ser de tipo DATE (fecha).

Supongamos que tenemos dos columnas o campos llamados START_DATE y END_DATE, ambos de tipo DATE, en una tabla llamada JOB_HISTORY. Para obtener los días entre dichas fechas utilizaríamos algo así:

SELECT 
    end_date, start_date, end_date - start_date as dias
FROM 
    job_history;

Simplemente restamos de la fecha mayo o más actual (en este caso end_date) la fecha menor o más antigua (start_date) usando le palabra reservada o símbolo de menos ( – ). El resultado sería algo así:

Hay que tomar en cuenta que en esta operación Oracle toma como comienzo de la fecha la hora cero de día, es decir que no incluye el día final. Por ejemplo, supongamos que queremos obtener los días que hay entre el primero de enero del año dos mil y el 31 de enero de ese mismo año, la consulta sql sería:

select 
    TO_DATE('31/01/2000','DD/MM/YYYY') - TO_DATE('01/01/2000','DD/MM/YYYY') as dias
from dual;

La ejecución de esta consulta nos daría como resultado 30 días y no 31 como algunos esperaríamos. La solución sería añadir 1 a la operación:

select 
    (TO_DATE('31/01/2000','DD/MM/YYYY') - TO_DATE('01/01/2000','DD/MM/YYYY')) + 1 as dias
from dual;

Espero y les sirva este entrada o post. ¡Hasta la próxima!

Sql Developer: Cómo cargar todos los registros resultantes de una consulta SQL.

Por defecto y debido a cuestiones de rendimiento, SQL Developer de Oracle, sólo muestra 200 filas en el área de resultados después de ejecutar una consulta SQL. A medida que avanzamos con la barra de desplazamiento, va mostrando los resultados en conjuntos de 200 filas hasta llegar al fin.

SQL Developer no muestra todos los resultados de una sola vez, como a veces lo necesitamos. El estar desplazándonos por la barra de desplazamiento de la ventana de resultados es tardado y tedioso. Sin embargo, existe un pequeño truco para hacer que muestre los resultados completos una vez que hayamos  ejecutado la consulta SQL y nos muestre los primeros registros:

Nos ubicarnos en la ventana o área de resultados de la consulta y oprimimos las teclas Ctrl-Fin al mismo tiempo.

Esto nos llevará al última fila de la consulta y por ende cargará todas las filas de la consulta. La próxima vez que quieras que SQL Developer muestra todas las filas resultantes, aplica este truco.

¡Saludos!

Quitar acentos mediante una consulta SQL en Oracle

Supongamos que queremos crear “slugs” para nuestras URLs con los nombres de productos que contienen acentos. Pero ¿que es un slug? Bueno, un slug es colocar el titulo de una página en una URL válida para que de el usuario con sólo verla se de una idea de el contenido que puede encontrar en esa página.

Supongamos que la página anuncia nuestro producto “Computadora Portátil Lenovo X72”; el slug para está página sería “computadora-portatil-lenovo-x72”. Por lo general los “slugs” no llevan acentos, por lo tanto necesitamos reemplazarlos por su vocal base (á por a en el ejemplo anterior) y los espacios por los guiones.

Para específicamente el ejemplo anterior, utilizaríamos una combinación de las funciones TRANSLATE para reemplazar los espacios y acentos y la función LOWER para convertir el texto a minúsculas así:  

select Lower(Translate(‘Computadora Portátil Lenovo X72’,’á ‘,’a-‘)) from SYS.Dual;

Daría como resultado:

computadora-portatil-lenovo-x72

La función TRANSLATE trabaja parecido a la función REPLACE con la diferencia que la primera, permite reemplazar distintos caracteres a la vez como se puede observar en el ejemplo anterior (los caracteres ‘á’ fueron reemplazados por ‘a’  y los espacios por guiones ‘-‘).

Si lo que queremos es hacer una consulta más general para reemplazar los acentos en cualquier cadena de caracteres, emplearíamos una consulta SQL como esta:

select Translate(‘José Ángel Méndez Zúñiga’,’ÁáÉéÍíÓóÚú’,’AaEeIiOoUu’) from Dual;

Lo que daría como resultado:

Jose Angel Mendez Zuñiga

Espero y les sea útil.

¡Hasta la próxima!