En un reciente proyecto personal en el que estoy embarcado, utilizo C#, en donde sólo es necesario una referencia a la librería System.Data.SQLite.dll (se puede descargar de http://sqlite.phxsoftware.com/). En el ordenador final, a la hora de instalarse, no es necesario tener el motor de la base de datos, pues la propia librería actúa como tal, y de una manera muy rápida y eficiente.
Pero SQLite puede utilizarse de muchas maneras, como embebido en C, o desde Java, o desde PHP (sólo por citar las más populares). Además, existen multitud de IDE's para diseñar y gestionar la base de datos, y no sólo una consola de comandos, por lo que no hay excusa para no probar esta base de datos.
Querría haber empezado una serie de posts sobre SQLite desde el principio (cosa que haré más adelante), pero por tiempo empezaré directamente con algo que puede despistarnos con respecto a otras bases de datos, y son el uso de fechas.
Un campo fecha se define como:
CREATE TABLE (nombre_campo DATE ...);
Aunque permite insertar o modificar los datos en el formato 'dd/mm/yyyy' es recomendable almacenar las fechas en el formato ordenable, del estilo '2004-06-26T20:11:04' (en .NET se realiza mediante String.Format("{0:s}", valor_datetime). Aunque este formato es válido, a la hora de comparar fechas tendrá en cuenta también la hora, por lo que si la precisión que se desea es sobre el día, y no sobre día y hora, el formato recomendado sería 'yyyy-mm-dd', que en .NET se obtendría mediante String.Format("{0:yyyy'-'MM'-'dd}", valor_datetime).
La razón de de este formato es que SQLite, internamente, la fecha se almacena como una cadena de texto.
Pero a la hora de hacer una búsqueda por fechas, del estilo:
SELECT ...
FROM ...
WHERE fecha1>fecha2
nos llevaremos una sorpresa al comprobar que no nos hace mucho caso.
A la hora de comparar fechas, hay que utilizar el formato juliano, y ello se consigue mediante una función especial de SQLite.
SELECT ...
FROM ...
WHERE julianday(fecha1)>julianday(fecha2)
De esta manera la comparación de fechas funcionará sin problemas.
4 comentarios:
Hola ingeniero, queria felicitarlo por su blog muy interesante y sobre todo una ayuda para estudiantes como yo que se estan tratanndo de forgar un camino en esta gran ciencia.
Ingeniero quiria saber si me pudiera ayudar a resover una inquietud que tengo, lo que pasa es que estoy desarrollando un proyecto con php y sqlite y el problema se concentra en q cuando yo creo mi base desde php y quiero verla desde el cmd me arroja "archivo encriptado o la base no existe", y cuando la creo en el cmd y quiero ejecutar consultas desde php me arroja error..... quisiera saber si se puede ayudar con esta inquietud , gracias de antemano
Hola Rafael, actualmente trabajo con la versión 3 de sqlite y utilizo la misma librería que mencionas para el uso de este pseudomotor de BD, mi problema radica en que quiero que la maquina que contiene la DB obtenga el valor de la hora de esa máquina, utilize el valor por default de Current_timestamp pero sucede que este me obtiene la hora universal y no de la máquina que es -4 horas. mi pregunta es si hay alguna linea por defecto que me obtenga la hora de esa maquina sin estar aplicando triggers. Espero puedas darme una mano.
Esta entrada me acaba de salvar la vida. Gracias.
Muy buen tuto
Publicar un comentario en la entrada