@didxga: Achtung: (Ende - Start) gibt KEINE Sekunden Differenz zwischen Datum / Uhrzeit-Werten zurück. Es wird eine Zahl zurückgegeben, die den Unterschied zwischen Dezimalzahlen darstellt, die wie yyyymmddhhmmss aussehen.
HelloPiers
Antworten:
328
SELECT TIMEDIFF('2007-12-31 10:02:00','2007-12-30 12:01:01');-- result: 22:00:59, the difference in HH:MM:SS formatSELECT TIMESTAMPDIFF(SECOND,'2007-12-30 12:01:01','2007-12-31 10:02:00');-- result: 79259 the difference in seconds
So können Sie TIMESTAMPDIFFfür Ihren Zweck verwenden.
Was bedeutet "der Unterschied in Sekunden für Tage" genau? Ich verstehe nicht, warum das Multiplizieren des Ergebnisses von TIMEDIFFmit dem Ergebnis von 24*60*60nicht gleich ist TIMESTAMPDIFF.
David Tuite
Diese Lösung hat bei mir funktioniert! Aber in meinem Fall möchte ich das TIMESTAMPDIFF am TAG durchführen, aber ohne Berücksichtigung der Wochenenden (Sa / So). Ich meine, nur Wochentagsunterschied ... Ist es auf einfache Weise möglich? Wenn nicht, entschuldige ich mich für die Unannehmlichkeiten und suche nach einer anderen Lösung. TKs.
Massa
8
TIMEDIFF im Beispiel ist falsch, da dies nicht die Anzahl der Sekunden zwischen diesen beiden Tagen ist. TIMEDIFF gibt einen TIME-Wert zurück, der Stunden, Minuten und Sekunden der Differenz enthält. Wenn Sie es multiplizieren, erhalten Sie keine nützliche Antwort. Verwenden Sie TIMESTAMPDIFF.
IvanD
4
Interessant, dass 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:
Lieber, es ist perfekt für die obige Frage, aber ich möchte eine Modifikation mit der gleichen Abfrage, also könnte mir bitte helfen, wie man das erreichen kann. hier möchte ich das Endergebnis mit meinem Wert vergleichen, so SELECT * FROM table where datediff(today,databasedate) as days =3;etwas wie das
Sooraj Abbasi
9
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')
unix_timestamp - eine Standardmethode für das Timing in Unix-ähnlichen Systemen. Stellt eine 32-Bit-Ganzzahl dar, die angibt, wie viele Sekunden seit dem 01.01.1970 00:00:00 vergangen sind. Dh eine Untergrenze. Die Obergrenze ist auf 2.106 pro Jahr begrenzt, wird jedoch aufgrund häufiger Programme, die nicht mit diesem Wert arbeiten (anstelle einer vorzeichenlosen Ganzzahl mit vorzeichenbehafteter Ganzzahl), 2038 als Obergrenze angesehen.
Devid G
+ beim Durchlaufen der Sommerzeit wird fälschlicherweise abgezogen / hinzugefügt
TC möchte den Ergebniswert in Sekunden oder Millisekunden erhalten.
Devid G
0
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
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 resultsset@StartDate ='2013-12-30'--birthdateset@EndDate = Getdate()--current datetime--calculate yearsselect@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 =casewhen datediff(month,@StartDate,@EndDate)-( datediff(year,@StartDate,@EndDate)*12)<0then-1else1end--decrease year by 1 if months are Overflowedselect@Years =casewhen@monthOverflow <0then@years-1 else@years endselect@months = datediff(month,@StartDate,@EndDate)-(@years *12)--as we do for month overflow criteria for days and hours --& minutes logic will followed same waydeclare@LastdayOfMonth int
select@LastdayOfMonth = datepart(d,DATEADD
(s,-1,DATEADD(mm, DATEDIFF(m,0,@EndDate)+1,0)))select@days =casewhen@monthOverflow<0and
DAY(@StartDate)> DAY(@EndDate)then@LastdayOfMonth +(datepart(d,@EndDate)- datepart(d,@StartDate))-1else datepart(d,@EndDate)- datepart(d,@StartDate)endselect@Months=casewhen@days <0or DAY(@StartDate)> DAY(@EndDate)then@Months-1 else@Months endDeclare@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 =casewhen(@lastdayBirthdate >@lastdayAsOnDate)then@lastdayBirthdate +@Days
else@lastdayAsOnDate +@Days
end)printconvert(varchar,@years)+' year(s), '+convert(varchar,@months)+' month(s), '+convert(varchar,@days)+' day(s) '
Warum nicht einfach die TIMESTAMPDIFFFunktion nutzen?
Codeforester
0
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 isfor 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 isfor 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.
Achtung: (Ende - Start) gibt KEINE Sekunden Differenz zwischen Datum / Uhrzeit-Werten zurück. Es wird eine Zahl zurückgegeben, die den Unterschied zwischen Dezimalzahlen darstellt, die wie yyyymmddhhmmss aussehen.
HelloPiers
-1
Warum nicht einfach
Wählen Sie Summe (Datum1 - Datum2) aus der Tabelle
Dies gibt nicht die Datumsdifferenz in Sekunden zurück, sondern die Differenz zwischen Dezimalzahlen, die wie yyyymmddhhmmss aussehen. Dies löst also nicht die Frage von OP. Dasselbe wird auch im Kommentar zur Frage erwähnt.
Antworten:
So können Sie
TIMESTAMPDIFF
für Ihren Zweck verwenden.quelle
TIMEDIFF
mit dem Ergebnis von24*60*60
nicht gleich istTIMESTAMPDIFF
.TIMEDIFF()
erwartet wird , dass die Argumente für Anfangs- und Endzeit in der entgegengesetzten Reihenfolge liegen als von erwartetTIMESTAMPDIFF()
.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:
quelle
DATEDIFF
gibt keine Brüche zurück.Ermitteln Sie die Datumsdifferenz in Tagen mit DATEDIFF
ODER
Siehe den folgenden Link MySQL-Unterschied zwischen zwei Zeitstempeln in Tagen?
quelle
SELECT * FROM table where datediff(today,databasedate) as days =3;
etwas wie dasquelle
quelle
Zweiter Ansatz
SELECT ( DATEDIFF('1993-02-20','1993-02-19')*( 24*60*60) )AS 'seccond';
quelle
Oder Sie können die TIMEDIFF-Funktion verwenden
quelle
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
quelle
OK, es ist nicht ganz das, was das OP gefragt hat, aber es ist das, was ich tun wollte :-)
quelle
Dieser Code berechnet die Differenz zwischen zwei Daten im Format JJJJ MM TT.
quelle
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:
% 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.
quelle
Sie würden dies einfach tun:
quelle
Warum nicht einfach
Wählen Sie Summe (Datum1 - Datum2) aus der Tabelle
Datum1 und Datum2 sind Datum / Uhrzeit
quelle