Buscar en este blog...

sábado, 17 de octubre de 2015

DB2 - trabajar con operaciones con fechas desde una columna numérica

En esta ocasión les voy a pasar un tip bastante útil cuando nos encontramos con un sistema legacy o que, por alguna razón, utiliza un campo numérico para almacenar las fechas. Por ejemplo, supongamos que una columna denominada FECHA tiene el formato "YYYYMMDD", es decir que la fecha 5 de noviembre de 2014 la almacenaríamos como "20141105".

El inconveniente surge cuando tenemos que realizar una operación sobre esta fecha, por ejemplo, traer con una consulta SQL las operaciones que se realizaron en el mismo día del mes anterior a una fecha determinada.

Para realizar esto, podemos valernos de la siguiente consulta, la cual va a convertir la fecha numérica a un formato date, realiza la operación correspondiente y vuelve a convertirla al formato correspondiente:


varchar_format(cast(cast(substr(FECHA, 1, 4)||substr(FECHA, 5, 2)||substr(FECHA, 7, 2) as date) - 1 month as timestamp), 'YYYYMMDD')

de esta forma, por ejemplo podríamos cruzar las operaciones de una fecha contra las del día anterior:

SELECT *
FROM TABLA t1
INNER JOIN TABLA t2
ON t2.fecha = varchar_format(cast(cast(substr(t1.FECHA, 1, 4)||substr(t1.FECHA, 5, 2)||substr(t1.FECHA, 7, 2) as date) - 1 day as timestamp), 'YYYYMMDD')

No hay comentarios:

Publicar un comentario