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''
Obtenga la diferencia de fecha en días usando DATEDIFF
SELECT DATEDIFF(''2010-10-08 18:23:13'', ''2010-09-21 21:40:36'') AS days;
+------+
| days |
+------+
| 17 |
+------+
O
Consulte el enlace siguiente Diferencia de MySql entre dos marcas de tiempo en días?
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 :-)