AndrPills: Dates & SQLite

Cuando en su día busqué información en la red sobre cómo manejar adecuadamente las fechas en SQLite, encontré muchas respuestas que recomendaban transformar la fecha recibida, en nuestro caso una cadena de texto en formato UTC,  a milisegundos. De este modo, según comentaban, se podían realizar consultas con resultados ordenados en base a la fecha. Pensé, tiene sentido, pero de verdad ¿no hay nada mejor?

Fui a la documentación oficial y voilà, si bien es cierto que SQLite no dispone de un tipo específico de datos para almacenar fechas, únicamente maneja los tipos: NULL, TEXT, INTEGER, REAL y BLOB, no es necesario transformar en milisegundos las fechas para poder recibir resultados ordenados en base a este atributo en nuestras consultas. SQLite es capaz de almacenar fechas en varios formatos:

  • TEXT como strings en formato ISO8601 («YYYY-MM-DD HH:MM:SS.SSS»)
  • REAL como número en días Julianos (calendario Gregoriano)
  • INTEGER como número en formato Unix, es decir, el número de segundos transcurridos desde 1970-01-01 00:00:00 UTC

Si en nuestros desarrollos, el formato por defecto de los tipos no se ajusta a los requerimientos, es posible definir formatos personalizados a través de las funciones para fechas que provee SQLite.

En nuestro ejemplo, como se trata de una fecha en formato UTC (ISO8601), podemos almacenar la fecha recibida en este formato sin necesidad de aplicar transformaciones previas que supongan una pérdida de recursos para nuestro teminal (+ procesado –> + consumo batería) y realizar consultas ordenadas en base a este atributo posteriormente.

Espero que esta píldora os sea de utilidad. Ahora a disfrutar del fin de semana.

Enlaces de interés

Tipo de datos SQLite | http://www.sqlite.org/datatype3.html

Funciones para fechas SQLite | http://www.sqlite.org/lang_datefunc.html

  • contacto@pinicius.com
  • (+34)616810829