Mostrando entradas con la etiqueta bases de datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta bases de datos. Mostrar todas las entradas

miércoles, 15 de enero de 2014

Cálculo de diferencia entre dos fechas en Oracle 11g

El WMS que utiliza la empresa para la que trabajo provee -entre muchas otras cosas- la posibilidad de mostrar el tiempo de carga de los camiones que se envían con producto terminado a los clientes a partir del cálculo de la diferencia entre el momento en el que se ingresan el primer y último pallet en los mismos. Sin embargo, muestra este dato en un formato decimal en vez de hh:mm (que es más "amigable" y entendible a primera vista).

Por ejemplo:

2.0representa2:00
1.51:30
1.21:12

El proceso de modificación se llevó a cabo en dos partes: 1) Convertir la diferencia de fechas al formato hh:mi, y 2) Asegurar que la los minutos representados por un dígito (1 a 9) se muestren con un cero al principio (01...09).

CONVERTIR LA DIFERENCIA DE FECHAS AL FORMATO HH24:MI

Voy a llamar a la fecha inicial como start_date y a la fecha final como end_date, ambas en el formato DD-MON-YY HH24:MI.

Como punto de partida, es importante tener en cuenta que al realizar la diferencia entre dos fechas en Oracle 11g,


el resultado entregado es el equivalente en días:


En primer lugar multiplicamos la diferencia por 24 para obtener el número de horas correspondiente


(también redondeamos a dos dígitos decimales el resultado):

Ahora separamos la parte entera del resultado anterior como horas y a los dos dígitos decimales los convertimos a su equivalente en minutos:



Podemos ir un paso más allá y solamente tomar la parte entera de la última columna (ya que representa un grado de precisión suficiente) para luego convertir el nuevo resultado a formato de minutos (anteponiendo un cero en el caso de que el número de minutos esté entre 1 y 9).

ASEGURAR QUE LA CANTIDAD DE MINUTOS SE MUESTRE EN EL FORMATO mi


Se utiliza el modelo 'mi' de las funciones TO_DATE y TO_CHAR para representar una cantidad entera comprendida entre 0 y 59 como minutos. Cabe aclarar que si el número en cuestión está fuera de ese rango, cualquiera de las funciones arrojará un error.
La parte entera de las horas se concatena con el equivalente de la parte decimal en minutos mediante el operador "||" utilizando como separador los dos puntos ":".

Documentación de las funciones utilizadas:

viernes, 8 de febrero de 2013

Ejecutar consulta SQL guardada en un archivo

Esta semana se presentó en mi trabajo la necesidad de hacer dos consultas a una base de datos Oracle (Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production) para crear un reporte de producción que permitiera visualizar ciertos campos no disponibles mediante el menú estándar en el sistema.
Estas son las dos consultas y los comentarios sobre lo que aprendí al escribirlas. Para ejecutar el contenido del archivo, se escribe @nombredearchivo.sql desde el prompt del frontend del RDBMS (Relational Database Management System).
Para bases MySQL (no hace mucho adquirida por Oracle), la sintaxis es parecida, aunque reemplazando "@" por la palabra clave "source": source nombredearchivo.sql.

PRIMER CONSULTA: Uso de la función TO_DATE() para comparar fechas y SPOOL/SPOOL OFF para guardar los resultados en un archivo de texto.


SEGUNDA CONSULTA: Uso de la función TRUNC(sysdate) para obtener los registros pertenecientes a un intervalo de tiempo fijo (pero configurable).


El sitio donde aprendí lo necesario para hacer estas consultas es Burleson Consulting. Se trata de una consultora que brinda soporte y aplicaciones de Oracle (aunque indican que no están afiliados con ellos).

viernes, 23 de noviembre de 2012

Génesis

Comienzo este blog para documentar las cosas que hago y que aprendo con GNU/Linux, lenguajes de programación (C#, Bash scripting, Java, Python, Ruby, PHP, Vbscripting... sí, todavía algo se usa), bases de datos (SQL Server, MySQL), y desarrollo de aplicaciones web (HTML5, CSS / CSS3) tanto por mi trabajo (soy desarrollador junior en una empresa cuyo principal cliente es la mayor compañía de productos masivos de consumo a nivel mundial) como en cosas personales.
Bastante variadito, pero acá vamos...