Parece que no puedo obtener resultados confiables de la consulta contra una base de datos sqlite usando una cadena de fecha y hora como comparación de la siguiente manera:
select *
from table_1
where mydate >= '1/1/2009' and mydate <= '5/5/2009'
¿Cómo debo manejar las comparaciones de fecha y hora con sqlite?
actualización: el campo mydate es un tipo de datos DateTime
mydate
columna? Supongo que no es uno de los formatos compatibles con SQLite: sqlite.org/lang_datefunc.html'2009-11-13'
, para mydate, será menor que'2009-11-13 00:00:00'
.)Datetime()
tal como @Brad ha incluido en su mención de la solución. De lo contrario VS2012 se queja. Gracias Brad.Respuestas:
SQLite no tiene tipos de fecha y hora dedicados , pero tiene algunas funciones de fecha y hora . Siga los formatos de representación de cadenas (en realidad, solo los formatos 1-10) comprendidos por esas funciones (almacenando el valor como una cadena) y luego puede usarlos, además la comparación lexicográfica en las cadenas coincidirá con la comparación de fecha y hora (siempre que no lo haga intente comparar fechas con horas o fechas con horas, lo cual no tiene mucho sentido de todos modos).
Dependiendo del idioma que use, incluso puede obtener una conversión automática . (Lo cual no se aplica a las comparaciones en declaraciones SQL como el ejemplo, pero le facilitará la vida).
fuente
date
ydatetime
date
(odatetime
) en la columna que internamente se trata comotext
. Eso se ajusta a mis necesidades.Para resolver este problema, guardo las fechas como
YYYYMMDD
. Así,where mydate >= '20090101' and mydate <= '20050505'
Simplemente FUNCIONA todo el tiempo. Es posible que solo necesite escribir un analizador para manejar cómo los usuarios pueden ingresar sus fechas para que pueda convertirlas a
YYYYMMDD
.fuente
Tuve el mismo problema recientemente y lo resolví así:
fuente
strftime
en una cláusula WHERE como en este ejemplo, y tengo una pregunta: ¿Es eficiente usarlostrftime
así? ¿Se evalúa una vez por cada fila o una vez por consulta?Lo siguiente funciona bien para mí usando SQLite:
fuente
Sqlite no se puede comparar en fechas. necesitamos convertirlo en segundos y convertirlo en un número entero.
Ejemplo
fuente
Seguir funcionó para mí.
fuente
Tengo una situación en la que quiero datos de hasta dos días atrás y hasta el final de hoy. Llegué a lo siguiente.
Ok, técnicamente también saco la medianoche de mañana como el póster original, si había algún dato, pero todos mis datos son históricos.
La clave para recordar, el cartel inicial excluyó todos los datos después del 15-11-2009 00:00:00. Por lo tanto, se incluyeron todos los datos que se registraron a la medianoche del día 15, pero no los datos posteriores a la medianoche del día 15. Si su consulta fue,
Uso de la cláusula entre para mayor claridad.
Hubiera sido un poco mejor. Todavía no tiene en cuenta los segundos intercalares en los que una hora puede tener más de 60 segundos, pero lo suficientemente bueno para las discusiones aquí :)
fuente
Tuve que almacenar la hora con la información de la zona horaria y pude hacer que las consultas funcionaran con el siguiente formato:
La hora se almacena en la base de datos como TEXTO normal en el siguiente formato:
fuente
A continuación se muestran los métodos para comparar las fechas, pero antes necesitamos identificar el formato de la fecha almacenada en la base de datos
Tengo fechas almacenadas en formato MM / DD / YYYY HH: MM, por lo que debe compararse en ese formato
La siguiente consulta compara la conversión de la fecha en formato MM / DD / YYY y obtiene datos de los últimos cinco días hasta hoy. El operador BETWEEN lo ayudará y simplemente puede especificar la fecha de inicio Y la fecha de finalización.
La siguiente consulta utilizará un operador mayor que (>).
Todo el cálculo que he hecho es usar la hora actual, puede cambiar el formato y la fecha según sus necesidades.
Espero que esto te ayudará
Summved
fuente
También puede escribir sus propias funciones de usuario para manejar fechas en el formato que elija. SQLite tiene un método bastante simple para escribir sus propias funciones de usuario. Por ejemplo, escribí algunos para sumar duraciones de tiempo.
fuente
Mi consulta hice lo siguiente:
Recibí la pista por la respuesta de @ ifredy. Lo único que hice fue que quería que esta consulta se ejecutara en iOS, usando Objective-C. ¡Y funciona!
¡Espero que alguien que desarrolle iOS también aproveche esta respuesta!
fuente
En este momento estoy desarrollando usando el paquete System.Data.SQlite NuGet (versión 1.0.109.2). Que usando SQLite versión 3.24.0.
Y esto funciona para mí.
No puedo usar la función datetime (). Quizás ya actualizaron la consulta SQL en esa versión de SQLite.
fuente