obtener funciones formato fecha convert actual sqlite

funciones - sqlite time format



Diferencia entre 2 fechas en SQLite (9)

Ambas respuestas proporcionan soluciones un poco más complejas, como deben ser. Supongamos que el pago se creó el January 6, 2013 . Y queremos saber la diferencia entre esta fecha y hoy.

sqlite> SELECT julianday() - julianday(''2013-01-06''); 34.7978485878557

La diferencia es 34 días. Podemos usar julianday(''now'') para una mejor claridad. En otras palabras, no necesitamos poner las funciones date() o datetime() como parámetros para la función julianday() .

¿Cómo obtengo la diferencia en días entre 2 fechas en SQLite? Ya he intentado algo como esto:

SELECT Date(''now'') - DateCreated FROM Payment

Devuelve 0 todo el tiempo.


Dado que su formato de fecha es el siguiente: "AAAA-MM-DD HH: MM: SS", si necesita encontrar la diferencia entre dos fechas en cantidad de meses:

(strftime(''%m'', date1) + 12*strftime(''%Y'', date1)) - (strftime(''%m'', date2) + 12*strftime(''%Y'', date2))


El wiki de SQLite es una gran referencia y la página de DateAndTimeFunctions es buena para marcar. También es útil recordar que es bastante fácil jugar con consultas con la utilidad de línea de comandos sqlite:

sqlite> select julianday(datetime(''now'')); 2454788.09219907 sqlite> select datetime(julianday(datetime(''now''))); 2008-11-17 14:13:55


Esta respuesta es un poco larga, y la documentación no le dirá esto (porque suponen que está almacenando sus fechas como fechas UTC en la base de datos), pero la respuesta a esta pregunta depende en gran medida de la zona horaria en que se almacenan sus fechas. in. Tampoco usa Date(''now'') , pero usa la función julianday() para calcular ambas fechas en una fecha común, luego restar la diferencia de esos resultados entre sí.

Si sus fechas están almacenadas en UTC:

SELECT julianday(''now'') - julianday(DateCreated) FROM Payment;

Esto es lo que tiene la respuesta mejor clasificada, y también está en la documentación . Es solo una parte de la imagen, y una respuesta muy simplista, si me preguntas.

Si sus fechas se almacenan en la hora local, el uso del código anterior hará que su respuesta sea INCORRECTA por el número de horas que su compensación GMT es. Si te encuentras en el este de los EE. UU. Como yo, que es GMT -5, tu resultado tendrá 5 horas añadidas. Y si intenta hacer que DateCreated ajuste a UTC porque julianday(''now'') va contra una fecha GMT:

SELECT julianday(''now'') - julianday(DateCreated, ''utc'') FROM Payment;

Esto tiene un error donde agregará una hora para un DateCreated que es durante el horario de verano (de marzo a noviembre). Diga que "ahora" es al mediodía en un día que no es horario de verano y creó algo en junio (durante el horario de verano) al mediodía, su resultado dará una hora de diferencia, en lugar de 0 horas, para la porción de horas. Debería escribir una función en el código de la aplicación que muestre el resultado para modificar el resultado y restar una hora de las fechas del horario de verano. Lo hice hasta que me di cuenta de que había una mejor solución para ese problema que tenía: SQLite vs. Oracle - Cálculo de diferencias de fechas - horas

En cambio, como se me indicó, para las fechas almacenadas en la hora local, haga que ambas coincidan con la hora local:

SELECT julianday(''now'', ''localtime'') - julianday(DateCreated) FROM Payment;

O añada ''Z'' a la hora local:

julianday(datetime(''now'', ''localtime'')||''Z'') - julianday(CREATED_DATE||''Z'')

Ambas parecen compensar y no agregan la hora adicional para las fechas del horario de verano y restan directamente, por lo que ese elemento creado al mediodía en un día del horario de verano, al verificar al mediodía en un día sin horario de verano, no tendrá una hora extra cuando realizando el cálculo.

Y aunque reconozco que la mayoría dirá que no almacene fechas en hora local en su base de datos, y que las almacene en UTC para que no se encuentre con esto, bueno, no todas las aplicaciones tienen una audiencia mundial, y no todos los programadores quieren pasar por la conversión de CADA fecha en su sistema a UTC y viceversa cada vez que hacen un GET o SET en la base de datos y se ocupan de averiguar si algo es local o está en UTC.


Si quiere registros entre días,

select count(col_Name) from dataset where cast(julianday("now")- julianday(_Last_updated) as int)<=0;


Si quieres tiempo en formato 00:00: lo resolví así:

select strftime(''%H:%M'',CAST ((julianday(FinishTime) - julianday(StartTime)) AS REAL),''12:00'') from something


Solo una nota para escribir funciones de reloj horario. Para aquellos que buscan horas trabajadas, un cambio muy simple de esto obtiene las horas más los minutos se muestran como un porcentaje de 60 ya que la mayoría de las compañías de nómina lo quiere.

CAST ((julianday(clockOUT) - julianday(clockIN)) * 24 AS REAL) AS HoursWorked

Clock In Clock Out HoursWorked 2016-08-07 11:56 2016-08-07 18:46 6.83333332836628


Diferencia en días

Select Cast (( JulianDay(ToDate) - JulianDay(FromDate) ) As Integer)

Diferencia en horas

Select Cast (( JulianDay(ToDate) - JulianDay(FromDate) ) * 24 As Integer)

Diferencia en minutos

Select Cast (( JulianDay(ToDate) - JulianDay(FromDate) ) * 24 * 60 As Integer)

Diferencia en segundos

Select Cast (( JulianDay(ToDate) - JulianDay(FromDate) ) * 24 * 60 * 60 As Integer)


SELECT julianday(''now'') - julianday(DateCreated) FROM Payment;