Comparación de fecha y hora de SQLite
-
Compare dos fechas con el tipo de datos
DateTime
-
Utilice la función
strftime()
para comparar dos fechas en SQLite
La base de datos SQLite utiliza diferentes tipos de datos para almacenar, incluidos números enteros, cadenas y algunos formatos de fecha y hora. Para el almacenamiento de fecha y hora, hay varios tipos, como fecha
, pequeña fecha y hora
, DateTime
, datetime2
, etc.
Generalmente, usamos la cláusula WHERE
para comparar en la base de datos SQLite y recuperar los datos requeridos.
La pregunta es cómo comparar diferentes tipos de formatos de fecha y hora dentro de la base de datos SQL. Recuerde, no hay una forma directa de comparar las fechas y horas.
Compare dos fechas con el tipo de datos DateTime
En SQLite, no existe tal forma de comparar fechas directamente. Sin embargo, hay funciones integradas para fechas y horas en SQLite, que pueden almacenar fechas y horas en el texto, números enteros o valores reales.
Dependen de la aplicación y podemos elegir el formato para las funciones de fecha y hora integradas.
- El texto toma las cadenas
ISO8601
con el formatoYYYY-MM-DD HH:MM:SS.SSS
. - Integer toma la hora Unix, que tiene el formato
1970-01-01 00:00:00 UTC
.
Entonces, para comparar, generalmente convertimos la fecha y la hora en una cadena en un formato particular para que sea consistente. Por ejemplo, almacenamos la fecha en el formato YYYY-MM-DD hh:mm:ss
.
Si almacenamos constantemente la fecha y la hora en este formato, podemos comparar fácilmente la fecha y la hora. Podemos seguir la declaración a continuación para demostrar un ejemplo de comparación simple con fechas.
SELECT * FROM name_of_the_table WHERE comparsion_date < '2020-04-05 00:00:00';
Aunque podemos ver que la comparación no es numérica, tenemos una comparación alfabética. Esto es correcto si el formato de fecha almacenado y la fecha de comparación tienen formatos similares.
Aquí, debemos recordar dos puntos importantes.
- Se sugiere almacenar la hora en formato de 24 horas ya que nos será fácil compararlas.
- No es necesario almacenar la fecha y la hora en una sola columna, pero el factor importante es la consistencia en el formato. Porque si las fechas y las horas están en columnas separadas, entonces el formato debe ser
YYYY-MM-DD
para la columna de fecha yhh:mm:ss
para la columna de hora.
Entonces, si la fecha y la hora están en columnas separadas, escribimos la consulta SQL de la siguiente manera. El punto clave es hacer que el formato de fecha y hora sea consistente en toda la base de datos.
SELECT * FROM name_of_the_table WHERE comparsion_date = '2020-05-03' AND comparison_time = '08:03:11';
Otra razón por la que se prefiere el formato, YYYY-MM-DD hh:mm:ss
, es porque cuando ordenamos del índice más alto al más bajo, es decir, de horas a segundos, la comparación es muy fácil y el rendimiento gana. no ser degradado.
Utilice la función strftime()
para comparar dos fechas en SQLite
En SQLite, usamos la función strftime()
para devolver la fecha en un formato específico proporcionado al argumento. El segundo argumento devuelve la cadena de tiempo en un formato específico; el resto son modificadores para obtener datos con resultados diferentes.
La sintaxis de la función strftime()
es la siguiente.
strftime(date_format, time_string, remaining_modifiers, ...)
Para comparar la fecha y la hora usando la función strftime()
, usamos los operadores BETWEEN
y AND
en la instrucción SQL para encontrar una fecha particular en un período específico.
SELECT * FROM name_of_the_table WHERE
strftime('%s', c_date) BETWEEN strftime('%s', start_date) AND strftime('%s', end_date)
Usando la función strftime()
, podemos generar la diferencia entre dos fechas y horas desde la hora actual hasta una fecha y hora especificadas.
SELECT strftime('%s','now') - strftime('%s','2019-09-05 03:52:35');
Producción :
Output of strftime('%s','now') - strftime('%s','2019-09-05 03:52:35')
-----------------------------------------------------------
2010032
Convierta DateTime
a horas, minutos, segundos y milisegundos
Usamos la función strftime()
para convertir la unidad DateTime
a horas, minutos, segundos y milisegundos. Necesitamos usar la función strftime()
para lograr los siguientes resultados.
SELECT strftime('%H %M %S %s','now');
Producción :
Output of strftime('%H %M %S %s','now')
-----------------------------
16 54 04 2541572981
Calcule los segundos desde una hora específica hasta la hora actual (ahora)
También usamos la función strftime()
para convertir el tipo de datos DateTime
a segundos y calcular el total de segundos restantes de los argumentos proporcionados a la hora actual en segundos.
SELECT strftime('%s','now') - strftime('%s','2019-01-04 01:25:47');
Producción :
Output of strftime('%s','now') - strftime('%s','2019-01-04 01:25:47')
-----------------------------------------------------------
3221184
Calcule el historial de tiempo en años, meses y días
Tome un ejemplo simple del historial de mantenimiento del trabajo donde hay una tabla con la fecha de inicio y finalización del trabajo, y el usuario desea calcular el historial de tiempo total en términos de años, meses y días.
Aquí está el formato de la tabla con tres columnas: emp_id
, start_job_date
y end_job_date
. El tipo de dato de emp_id
es entero mientras que el resto de las columnas, start_job_date
y end_job_date
, son DateTime
.
emp_id |
start_job_date |
end_job_date |
---|---|---|
001 | 1997-04-23 | 2000-11-30 |
002 | 1993-05-21 | 1997-10-28 |
003 | 1996-08-02 | 1999-12-29 |
004 | 1990-04-11 | 1996-07-24 |
Para calcular la diferencia entre start_job_date
y end_job_date
de la tabla anterior usando las consultas SQL, usamos la función strftime()
para tener directamente la diferencia en años, meses y días.
SELECT strftime('%Y',end_job_date - start_job_date) as "Difference in years",
strftime('%m',end_job_date - start_job_date) as "Difference in months",
strftime('%d',end_date - start_job_date) as "Difference in days"
FROM job_history;
Producción:
Diferencia en años | Diferencia en meses | Diferencia en dias |
---|---|---|
3 | 7 | 7 |
4 | 5 | 7 |
3 | 4 | 27 |
6 | 3 | 13 |
Hi, I'm Junaid. I am a freelance software developer and a content writer. For the last 3 years, I have been working and coding with Python. Additionally, I have a huge interest in developing native and hybrid mobile applications.
LinkedIn