timestampdiff restar minutos meses fechas entre ejemplos diferencia mysql sql date datetime

minutos - restar fechas mysql



Diferencia entre dos fechas en MySQL (13)

¿Cómo se calcula la diferencia entre dos fechas, en el formato YYYY-MM-DD hh: mm: ss y para obtener el resultado en segundos o milisegundos?


¿Por qué no solo

Seleccione Suma (Fecha1 - Fecha2) de la tabla

date1 y date2 son datetime


Esta función toma la diferencia entre dos fechas y la muestra en un formato de fecha aaaa-mm-dd. Todo lo que necesita es ejecutar el siguiente código y luego usar la función. Después de ejecutarlo puedes usarlo así

SELECT datedifference(date1, date2) FROM .... . . . . DELIMITER $$ CREATE FUNCTION datedifference(date1 DATE, date2 DATE) RETURNS DATE NO SQL BEGIN DECLARE dif DATE; IF DATEDIFF(date1, DATE(CONCAT(YEAR(date1),''-'', MONTH(date1), ''-'', DAY(date2)))) < 0 THEN SET dif=DATE_FORMAT( CONCAT( PERIOD_DIFF(date_format(date1, ''%y%m''),date_format(date2, ''%y%m''))DIV 12 , ''-'', PERIOD_DIFF(date_format(date1, ''%y%m''),date_format(date2, ''%y%m''))% 12 , ''-'', DATEDIFF(date1, DATE(CONCAT(YEAR(date1),''-'', MONTH(DATE_SUB(date1, INTERVAL 1 MONTH)), ''-'', DAY(date2))))), ''%Y-%m-%d''); ELSEIF DATEDIFF(date1, DATE(CONCAT(YEAR(date1),''-'', MONTH(date1), ''-'', DAY(date2)))) < DAY(LAST_DAY(DATE_SUB(date1, INTERVAL 1 MONTH))) THEN SET dif=DATE_FORMAT( CONCAT( PERIOD_DIFF(date_format(date1, ''%y%m''),date_format(date2, ''%y%m''))DIV 12 , ''-'', PERIOD_DIFF(date_format(date1, ''%y%m''),date_format(date2, ''%y%m''))% 12 , ''-'', DATEDIFF(date1, DATE(CONCAT(YEAR(date1),''-'', MONTH(date1), ''-'', DAY(date2))))), ''%Y-%m-%d''); ELSE SET dif=DATE_FORMAT( CONCAT( PERIOD_DIFF(date_format(date1, ''%y%m''),date_format(date2, ''%y%m''))DIV 12 , ''-'', PERIOD_DIFF(date_format(date1, ''%y%m''),date_format(date2, ''%y%m''))% 12 , ''-'', DATEDIFF(date1, DATE(CONCAT(YEAR(date1),''-'', MONTH(date1), ''-'', DAY(date2))))), ''%Y-%m-%d''); END IF; RETURN dif; END $$ DELIMITER;


Este código calcula la diferencia entre dos fechas en el formato aa MM dd.

declare @StartDate datetime declare @EndDate datetime declare @years int declare @months int declare @days int --NOTE: date of birth must be smaller than As on date, --else it could produce wrong results set @StartDate = ''2013-12-30'' --birthdate set @EndDate = Getdate() --current datetime --calculate years select @years = datediff(year,@StartDate,@EndDate) --calculate months if it''s value is negative then it --indicates after __ months; __ years will be complete --To resolve this, we have taken a flag @MonthOverflow... declare @monthOverflow int select @monthOverflow = case when datediff(month,@StartDate,@EndDate) - ( datediff(year,@StartDate,@EndDate) * 12) <0 then -1 else 1 end --decrease year by 1 if months are Overflowed select @Years = case when @monthOverflow < 0 then @years-1 else @years end select @months = datediff(month,@StartDate,@EndDate) - (@years * 12) --as we do for month overflow criteria for days and hours --& minutes logic will followed same way declare @LastdayOfMonth int select @LastdayOfMonth = datepart(d,DATEADD (s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate)+1,0))) select @days = case when @monthOverflow<0 and DAY(@StartDate)> DAY(@EndDate) then @LastdayOfMonth + (datepart(d,@EndDate) - datepart(d,@StartDate) ) - 1 else datepart(d,@EndDate) - datepart(d,@StartDate) end select @Months=case when @days < 0 or DAY(@StartDate)> DAY(@EndDate) then @Months-1 else @Months end Declare @lastdayAsOnDate int; set @lastdayAsOnDate = datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate),0))); Declare @lastdayBirthdate int; set @lastdayBirthdate = datepart(d,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@StartDate)+1,0))); if (@Days < 0) ( select @Days = case when( @lastdayBirthdate > @lastdayAsOnDate) then @lastdayBirthdate + @Days else @lastdayAsOnDate + @Days end ) print convert(varchar,@years) + '' year(s), '' + convert(varchar,@months) + '' month(s), '' + convert(varchar,@days) + '' day(s) ''


O bien, podría usar la función TIMEDIFF

mysql> SELECT TIMEDIFF(''2000:01:01 00:00:00'', ''2000:01:01 00:00:00.000001''); ''-00:00:00.000001'' mysql> SELECT TIMEDIFF(''2008-12-31 23:59:59.000001'' , ''2008-12-30 01:01:01.000002''); ''46:58:57.999999''



Si está trabajando con columnas de FECHA (o puede convertirlas en columnas de fecha), pruebe DATEDIFF () y luego multiplique por 24 horas, 60 min, 60 segundos (ya que DATEDIFF devuelve diff en días). De MySQL:

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

por ejemplo:

mysql> SELECT DATEDIFF(''2007-12-31 23:59:59'',''2007-12-30 00:00:00'') * 24*60*60


Si tiene una fecha almacenada en el campo de texto como una cadena, puede implementar este código y obtendrá la lista de los últimos días de una semana, un mes o un año de clasificación:

SELECT * FROM `table` WHERE STR_TO_DATE(mydate, ''%d/%m/%Y'') < CURDATE() - INTERVAL 30 DAY AND STR_TO_DATE(date, ''%d/%m/%Y'') > CURDATE() - INTERVAL 60 DAY //This is for a month SELECT * FROM `table` WHERE STR_TO_DATE(mydate, ''%d/%m/%Y'') < CURDATE() - INTERVAL 7 DAY AND STR_TO_DATE(date, ''%d/%m/%Y'') > CURDATE() - INTERVAL 14 DAY //This is for a week

% d% m% Y es su formato de fecha

Esta consulta muestra el registro entre los días establecidos allí como: Debajo de los últimos 7 días y Arriba de los últimos 14 días, por lo que sería el último registro de la semana que se mostraría el mismo concepto para el mes o el año. Cualquiera que sea el valor que proporcione en una fecha inferior como: a continuación, de 7 días, el otro valor sería el doble de 14 días. Lo que estamos diciendo aquí es que obtenga todos los registros anteriores de los últimos 14 días y menos de los últimos 7 días. Este es un registro semanal que puede cambiar el valor a 30-60 días por un mes y también por un año.

Gracias. Espero que ayude a alguien.


Simplemente harías esto:

SELECT (end_time - start_time) FROM t; -- return in Millisecond SELECT (end_time - start_time)/1000 FROM t; -- return in Second


SELECT TIMEDIFF(''2007-12-31 10:02:00'',''2007-12-30 12:01:01''); -- result: 22:00:59, the difference in HH:MM:SS format SELECT TIMESTAMPDIFF(SECOND,''2007-12-30 12:01:01'',''2007-12-31 10:02:00''); -- result: 79259 the difference in seconds

Entonces, puedes usar TIMESTAMPDIFF para tu propósito.


SELECT TIMESTAMPDIFF(HOUR,NOW(),''2013-05-15 10:23:23'') calculates difference in hour.(for days--> you have to define day replacing hour SELECT DATEDIFF(''2012-2-2'',''2012-2-1'') SELECT TO_DAYS (''2012-2-2'')-TO_DAYS(''2012-2-1'')


SELECT TIMESTAMPDIFF(SECOND,''2018-01-19 14:17:15'',''2018-01-20 14:17:15'');

Segundo enfoque

SELECT ( DATEDIFF(''1993-02-20'',''1993-02-19'')*( 24*60*60) )AS ''seccond'';

CURRENT_TIME() --this will return current Date DATEDIFF('''','''') --this function will return DAYS and in 1 day there are 24hh 60mm 60sec


select unix_timestamp(''2007-12-30 00:00:00'') - unix_timestamp(''2007-11-30 00:00:00'');


select TO_CHAR(TRUNC(SYSDATE)+(to_date( ''31-MAY-2012 12:25'', ''DD-MON-YYYY HH24:MI'') - to_date( ''31-MAY-2012 10:37'', ''DD-MON-YYYY HH24:MI'')), ''HH24:MI:SS'') from dual

- resultado: 01:48:00

OK, no es exactamente lo que OP me pidió, pero es lo que quería hacer :-)