Vergleichen von zwei Daten in MySQL
- Erstellen einer Tabelle und Einfügen von Werten
-
Vergleich zweier Daten mit der
WHERE
-Klausel -
Zwei Daten mit dem
BETWEEN
-Operator vergleichen -
Vergleich zweier Datumswerte mit der Funktion
DATE_ADD
In diesem Artikel wird der Vergleich zweier Datumsangaben in MySQL erläutert. Um diese Aufgabe zu lösen, gibt es drei verschiedene Ansätze.
- Verwendung der
WHERE
-Klausel - Verwendung des Operators
BETWEEN
- Verwendung der Funktion
DATE_ADD
Erstellen einer Tabelle und Einfügen von Werten
Zuerst erstelle ich eine Tabelle für den Mitarbeiter als
Create table employee (empid int primary key, fname varchar(10), lname varchar(20), logindate timestamp not null default CURRENT_TIMESTAMP);
Nun füge ich zur Veranschaulichung einige Werte in die Tabelle ein.
INSERT INTO employee('empid', 'fname', 'lname')VALUES (1,'aaa','bbb');
INSERT INTO employee VALUES
(201,'Peter','Parker','2001-01-01 16:15:00'),
(202,'Thor','Odinson','2021-08-02 12:15:00'),
(204,'Loki','Laufeyson','2009-08-03 10:43:24');
Vergleich zweier Daten mit der WHERE
-Klausel
Die folgende Abfrage ist ein sehr einfacher Ansatz, der die SELECT
-Abfrage verwendet, die alle Datensätze zwischen dem angegebenen Datumsbereich extrahiert.
SELECT * FROM employee WHERE logindate >= '2000-07-05' AND logindate < '2011-11-10';
Zwei Daten mit dem BETWEEN
-Operator vergleichen
Zuerst müssen wir in MySQL das Datum in eine Zeichenkette konvertieren. Um diese Aufgabe zu erfüllen, verwenden wir die DATE-Funktion, um das Datum aus einer Datetime zu extrahieren.
Die Syntax der DATE-Funktion ist unten.
DATE(column name)
Wenn Sie einen Index für die Spalte logindate nutzen möchten, können Sie dies stattdessen versuchen. Der Between-Operator kann auch verwendet werden, um alle Datensätze auszuwählen, deren Datumsspalte zwischen zwei angegebenen Datumsausdrücken liegt.
SELECT * FROM employee WHERE DATE(logindate) BETWEEN '2000-07-05' AND '2011-11-10';
MySQL erlaubt nur ein yyyy-mm-dd
-Datumsformat. Wenn Sie also einen String-Datumsausdruck formatieren müssen, müssen Sie dieses Format verwenden.
Jetzt haben Sie vielleicht eine Frage, was die Funktion DATE() im Vergleich dazu benötigt?
Die MySQL DATE()-Funktion extrahiert also den Datumsteil aus Ihrer DATETIME- oder TIMESTAMP-Spalte in eine Zeichenkette, wie unten gezeigt:
mysql> SELECT DATE('2005-08-28 01:02:03'); -> '2005-08-28'
Die Funktion DATE()
wird verwendet, damit MySQL nur den Datumsteil Ihrer Spaltenwerte zum Vergleich berücksichtigt. Wenn Sie die Funktion DATE()
nicht verwenden, vergleicht MySQL den Zeitanteil Ihrer Spalte mit Ihrem String-Ausdruck. Mit dieser Option schließt jeder Vergleich den angegebenen Zeichenkettenausdruck als Teil der Ergebnismenge ein
Beim Vergleich einer DATETIME- oder TIME-STAMP-Spalte mit einer Zeichenkette, die ein Datum darstellt, wie in der obigen Abfrage, wandelt MySQL sowohl Spalten- als auch Ausdruckswerte zum Vergleich in Long-Integer-Typen um.
Aus diesem Grund müssen Sie, obwohl Sie eine Datumsspalte mit einer Zeichenkette vergleichen, Ihre Datumsspaltenwerte nicht manuell in eine Zeichenkette umwandeln.
Vergleich zweier Datumswerte mit der Funktion DATE_ADD
Ein anderer Ansatz ist die Verwendung der Funktion DATE_ADD()
. Allerdings benötigt dieser Ansatz nicht unbedingt die Funktion DATE_ADD()
. Wenn Sie jedoch einige Minuten nach dem gewünschten Datum als Teil der Lösung betrachten möchten, können Sie dies verwenden. Zum Beispiel, wenn ich alle Datensätze zwischen dem angegebenen Datumsbereich möchte, aber die Datensätze berücksichtigen kann, die 15 Minuten nach dem angegebenen Limit eingefügt wurden. Diese Funktion ist sehr nützlich.
Die Funktion DATE_ADD() wird verwendet, um einem bestimmten Datum eine angegebene Zeit oder ein Datumsintervall hinzuzufügen und dann das Datum zurückzugeben. Die Funktion DATE_ADD benötigt zwei Parameter, der erste Parameter ist das Datum und der zweite das Intervall, das hinzugefügt werden soll.
select * from employee
where logindate between '2000-07-05' and DATE_ADD('2011-07-10',INTERVAL 15 MINUTE);