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

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


Cambié mi columna a fecha y hora. La sustracción simple 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 diff esté en segundos, porque cuando divido diff por número de segundos en un día (86,400), no obtengo una respuesta sensible:

 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) 

Si está contento de ignorar la porción de 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 | +------+ 

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

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

 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) 

Si desea regresar en formato TIMESTAMP completo, pruébelo: –

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

regresar como

  diff - - - 00:05:15 

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

aquí fechada toma dos argumentos ‘hasta la fecha’, ‘desde la fecha’

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

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

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

devolverá 16.8629 días.

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.