2017-09-18 1 views
0

ich die folgende Zeile in SQL-Abfrage in MySQL RDBMSWie wenn absoluter Wert von zwei DATETIME- überprüfen Differenz Felder kleiner dann 30 Sekunden

abs(timediff(tableA.enrollment_date, tableB.enrollment_date)) < 30 AND 

Dies bedeutet, dass der Unterschied zwischen den Zeiten sollte nicht mehr als 30 seconds sein .

Documentation von MySQL sagt, dass

Das Ergebnis zurückgegeben durch TIMEDIFF(), um den Bereich für TIME Werte erlaubt begrenzt ist. Alternativ können Sie eine der Funktionen TIMESTAMPDIFF() und UNIX_TIMESTAMP() verwenden, die beide Ganzzahlen zurückgeben.

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' 

gemäß abs() ich sehe, dass

Diese Funktion ist sicher mit BIGINT Werte zu verwenden.

Aber jetzt habe ich Zweifel an der Richtigkeit dieser.

Frage: Wie überprüft man, ob der absolute Wert von zwei DATETIME-Feldern kleiner als 30 Sekunden ist?

Antwort

3

Eine Methode ist:

(tableA.enrollment_date > tableB.enrollment_date - interval 30 second AND 
tableA.enrollment_date < tableB.enrollment_date + interval 30 second 
) 

Eine andere Methode ist die Verwendung to_seconds():

abs(to_seconds(tableA.enrollment_date) - to_seconds(tableB.enrollment_date)) < 30 
Verwandte Themen