minutos hours fechas entre ejemplos diferencia dates mysql datetime timestamp

hours - ¿Diferencia de MySql entre dos marcas de tiempo en días?



diferencia en minutos entre dos fechas mysql (7)

Sé que es bastante viejo, pero lo diré por el simple hecho de que estaba buscando el mismo problema y llegué aquí, pero necesitaba la diferencia en días.

SELECT (UNIX_TIMESTAMP(DATE1) - UNIX_TIMESTAMP(DATE2))/60/60/24 Unix_timestamp devuelve la diferencia en segundos, y luego solo divido en minutos (segundos / 60), horas (minutos / 60), días (horas) / 24).

¿Cómo puedo obtener la diferencia entre dos marcas de tiempo en días? ¿Debo usar una columna de fecha y hora para esto?

Cambié mi columna a datetime. La simple resta no parece darme un resultado en días.

mysql> SELECT NOW(), last_confirmation_attempt, NOW() - last_confirmation_attempt AS diff FROM DateClubs HAVING diff IS NOT NULL ; +---------------------+---------------------------+-----------------+ | NOW() | last_confirmation_attempt | diff | +---------------------+---------------------------+-----------------+ | 2010-03-30 10:52:31 | 2010-03-16 10:41:47 | 14001084.000000 | +---------------------+---------------------------+-----------------+ 1 row in set (0.00 sec)

No creo que la diff esté en segundos, porque cuando divido la diff por la cantidad de segundos en un día (86,400), no obtengo una respuesta sensata:

mysql> SELECT NOW(), last_confirmation_attempt, ( NOW() - last_confirmation_attempt) / 86400 AS diff FROM DateClubs HAVING diff IS NOT NULL ; +---------------------+---------------------------+----------------+ | NOW() | last_confirmation_attempt | diff | +---------------------+---------------------------+----------------+ | 2010-03-30 10:58:58 | 2010-03-16 10:41:47 | 162.0568402778 | +---------------------+---------------------------+----------------+ 1 row in set (0.00 sec)


SELECCIONE DATEDIFF (max_date, min_date) como días de mi tabla. Esto funciona incluso si col max_date y min_date están en tipos de datos de cadena.


Si desea volver en formato TIMESTAMP completo, inténtelo: -

SELECT TIMEDIFF(`call_end_time`, `call_start_time`) as diff from tablename;

volver como

diff - - - 00:05:15


Si está dispuesto a ignorar la parte del tiempo en las columnas, DATEDIFF() le dará la diferencia que está buscando en días.

SELECT DATEDIFF(''2010-10-08 18:23:13'', ''2010-09-21 21:40:36'') AS days; +------+ | days | +------+ | 17 | +------+


Si necesita la diferencia en días contabilizando hasta el segundo:

SELECCIONAR TIMESTAMPDIFF (SEGUNDO, ''2010-09-21 21:40:36'', ''2010-10-08 18:23:13'') / 86400 AS diff

Volveremos 16.8629 días.


SELECT DATEDIFF( now(), ''2013-06-20'' );

aquí el dateiff toma dos argumentos ''upto-date'', ''from-date''

Lo que he hecho es, usando la función now (), puedo obtener no. de días desde 20-junio-2013 hasta hoy.


CREATE TABLE t (d1 timestamp, d2 timestamp); INSERT INTO t VALUES (''2010-03-11 12:00:00'', ''2010-03-30 05:00:00''); INSERT INTO t VALUES (''2010-03-11 12:00:00'', ''2010-03-30 13:00:00''); INSERT INTO t VALUES (''2010-03-11 00:00:00'', ''2010-03-30 13:00:00''); INSERT INTO t VALUES (''2010-03-10 12:00:00'', ''2010-03-30 13:00:00''); INSERT INTO t VALUES (''2010-03-10 12:00:00'', ''2010-04-01 13:00:00''); SELECT d2, d1, DATEDIFF(d2, d1) AS diff FROM t; +---------------------+---------------------+------+ | d2 | d1 | diff | +---------------------+---------------------+------+ | 2010-03-30 05:00:00 | 2010-03-11 12:00:00 | 19 | | 2010-03-30 13:00:00 | 2010-03-11 12:00:00 | 19 | | 2010-03-30 13:00:00 | 2010-03-11 00:00:00 | 19 | | 2010-03-30 13:00:00 | 2010-03-10 12:00:00 | 20 | | 2010-04-01 13:00:00 | 2010-03-10 12:00:00 | 22 | +---------------------+---------------------+------+ 5 rows in set (0.00 sec)