Wie berechnet man die Differenz zwischen zwei Daten im Format YYYY-MM-DD hh: mm: ss
und erhält das Ergebnis in Sekunden oder Millisekunden?
Wie berechnet man die Differenz zwischen zwei Daten im Format YYYY-MM-DD hh: mm: ss
und erhält das Ergebnis in Sekunden oder Millisekunden?
Antworten:
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
So können Sie TIMESTAMPDIFF
für Ihren Zweck verwenden.
TIMEDIFF
mit dem Ergebnis von 24*60*60
nicht gleich ist TIMESTAMPDIFF
.
TIMEDIFF()
erwartet wird , dass die Argumente für Anfangs- und Endzeit in der entgegengesetzten Reihenfolge liegen als von erwartet TIMESTAMPDIFF()
.
Wenn Sie mit DATE-Spalten arbeiten (oder diese als Datumsspalten umwandeln können), versuchen Sie es mit DATEDIFF () und multiplizieren Sie dann mit 24 Stunden, 60 Minuten und 60 Sekunden (da DATEDIFF diff in Tagen zurückgibt). Von MySQL:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
beispielsweise:
mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30 00:00:00') * 24*60*60
DATEDIFF
gibt keine Brüche zurück.
Ermitteln Sie die Datumsdifferenz in Tagen mit DATEDIFF
SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
| 17 |
+------+
ODER
Siehe den folgenden Link MySQL-Unterschied zwischen zwei Zeitstempeln in Tagen?
SELECT * FROM table where datediff(today,databasedate) as days =3;
etwas wie das
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
unix_timestamp('2007-12-30 00:00:00') -
unix_timestamp('2007-11-30 00:00:00');
SELECT TIMESTAMPDIFF(SECOND,'2018-01-19 14:17:15','2018-01-20 14:17:15');
Zweiter Ansatz
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
Oder Sie können die TIMEDIFF-Funktion verwenden
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'
Diese Funktion nimmt die Differenz zwischen zwei Daten und zeigt sie in einem Datumsformat JJJJ-MM-TT an. Sie müssen lediglich den folgenden Code ausführen und dann die Funktion verwenden. Nach der Ausführung können Sie es so verwenden
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;
Dieser Code berechnet die Differenz zwischen zwei Daten im Format JJJJ MM TT.
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) '
TIMESTAMPDIFF
Funktion nutzen?
Wenn Sie ein Datum im Textfeld als Zeichenfolge gespeichert haben, können Sie diesen Code implementieren. Er ruft die Liste der vergangenen Tage pro Woche, eines Monats oder eines Jahres ab und sortiert:
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 ist Ihr Datumsformat
Diese Abfrage zeigt den Datensatz zwischen den Tagen an, die Sie dort festgelegt haben, wie folgt: Unten von den letzten 7 Tagen und Oben von den letzten 14 Tagen. Es wäre also Ihr Datensatz für die letzte Woche, wenn dasselbe Konzept für Monat oder Jahr angezeigt wird. Welchen Wert Sie auch immer unter dem Datum angeben, wie: unten ab 7 Tagen, der andere Wert wäre also doppelt so hoch wie 14 Tage. Was wir hier sagen, erhalten Sie alle Aufzeichnungen oben von den letzten 14 Tagen und unten von den letzten 7 Tagen. Dies ist ein Wochenrekord, den Sie für einen Monat und auch für ein Jahr auf 30-60 Tage ändern können.
Danke Ich hoffe, es wird jemandem helfen.
Sie würden dies einfach tun:
SELECT (end_time - start_time) FROM t; -- return in Millisecond
SELECT (end_time - start_time)/1000 FROM t; -- return in Second
Warum nicht einfach
Wählen Sie Summe (Datum1 - Datum2) aus der Tabelle
Datum1 und Datum2 sind Datum / Uhrzeit