1. Übersicht der MySQL NOW()-Funktion
Die MySQL NOW()-Funktion wird verwendet, um einfach das aktuelle Datum und die aktuelle Uhrzeit innerhalb einer Datenbank abzurufen. Durch die Nutzung der NOW()-Funktion können Sie Zeitstempel beim Einfügen von Daten erhalten oder Zeitinformationen für Protokollierungszwecke abrufen. Obwohl sie einfach ist, ist sie ein sehr leistungsfähiges Werkzeug, das weit verbreitet ist.
Grundlegende Syntax der NOW()-Funktion
Die Syntax der NOW()-Funktion ist sehr einfach. Sie können das aktuelle Datum und die aktuelle Uhrzeit mit der folgenden Abfrage abrufen.
SELECT NOW();
Das Ausführungsergebnis wird im Format YYYY-MM-DD HH:MM:SS zurückgegeben. Zum Beispiel, wenn das Datum und die Uhrzeit der 24. Oktober 2024 um 16:30 sind, sieht das Ergebnis wie folgt aus.
2024-10-24 16:30:00
Die NOW()-Funktion gibt das aktuelle Datum und die aktuelle Uhrzeit basierend auf der Zeitzone der Datenbank zurück. Dies ermöglicht ein konsistentes Zeitmanagement im gesamten System.
Häufige Anwendungsfälle für die NOW()-Funktion
Die NOW()-Funktion ist besonders in den folgenden Situationen nützlich.
- Logging : Zeichnet automatisch die Zeit auf, zu der Daten geändert oder eingefügt werden.
- Timestamps : Wird verwendet, um den Zeitpunkt von Benutzeraktionen zu protokollieren.
- Time-dependent filtering : Extrahiert Daten, die innerhalb eines bestimmten Zeitraums aufgetreten sind.
2. Grundlegende Anwendungsbeispiele der NOW()-Funktion
Betrachten wir grundlegende Beispiele zum Abrufen des aktuellen Datums und der aktuellen Uhrzeit mit der NOW()-Funktion.
SELECT NOW();
Diese Abfrage gibt das aktuelle Datum und die aktuelle Uhrzeit zurück. Neben der Rückgabe als Zeichenkette können Sie sie auch im numerischen Format erhalten. Mit der folgenden Abfrage wird das aktuelle Datum und die aktuelle Uhrzeit im numerischen Format (YYYYMMDDHHMMSS) zurückgegeben.
SELECT NOW() + 0;
Zum Beispiel kann das Ergebnis als „20241024163000“ zurückgegeben werden, was bei der numerischen Verarbeitung des Werts praktisch ist.
Angabe der Präzision für Bruchteilssekunden
Die NOW()-Funktion ermöglicht es, die Präzision für Bruchteilssekunden anzugeben. Sie können die Präzision mit einem Argument wie unten gezeigt festlegen.
SELECT NOW(3);
Diese Abfrage liefert ein Ergebnis mit Millisekunden‑Präzision (drei Stellen nach dem Dezimalpunkt). Zum Beispiel kann sie einen Wert wie „2024-10-24 16:30:00.123“ zurückgeben. Diese Funktion ist äußerst nützlich in Systemen, die Präzision bis zur Sekunde erfordern.
3. Unterschied zwischen SYSDATE() und NOW()
Es gibt eine Funktion, die der NOW() ähnlich ist, nämlich SYSDATE(), aber sie verhalten sich leicht unterschiedlich.
- NOW() : Ermittelt die Zeit zu Beginn der Abfrageausführung und behält denselben Wert während der gesamten Anweisung bei. Auch wenn eine Transaktion lange läuft, liefert sie dasselbe Ergebnis.
- SYSDATE() : Ermittelt die aktuelle Zeit bei jedem Schritt der Abfrage. Das heißt, selbst bei langlaufenden Transaktionen gibt sie die Echtzeit‑Uhrzeit zurück.
Zum Beispiel können bei langlaufenden Batch‑Prozessen SYSDATE() genauere Echtzeit‑Ergebnisse liefern. Wenn jedoch die Konsistenz von Transaktionen wichtig ist, wird im Allgemeinen NOW() empfohlen.
Beispiel, das den Unterschied innerhalb einer Abfrage zeigt
Die folgende Abfrage demonstriert das unterschiedliche Verhalten von SYSDATE() und NOW().
SELECT NOW(), SYSDATE();
Das Ergebnis kann etwa so aussehen.
NOW(): 2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01
Der Zeitunterschied zum Zeitpunkt der Abfrageausführung wird in SYSDATE() reflektiert, während NOW() die Zeit beibehält, zu der die Abfrageausführung begann. Obwohl der Unterschied subtil ist, ist es wichtig, je nach Anwendungsfall die passende Funktion zu wählen. 
4. Praktische Anwendungen der NOW()-Funktion
Die NOW()-Funktion ist in bestimmten Szenarien sehr nützlich. Wenn Sie beispielsweise das Datum und die Uhrzeit beim Einfügen von Daten automatisch aufzeichnen möchten, können Sie die NOW()-Funktion wie unten gezeigt verwenden.
INSERT INTO users (username, created_at)
VALUES ('example_user', NOW());
Dies zeichnet automatisch die aktuelle Zeit in der created_at‑Spalte auf, wenn der Datensatz eingefügt wird. Diese Funktion ist besonders wertvoll für Protokollierung und Ereignisverfolgung.
Zusätzlich, wenn Sie Daten abrufen möchten, die in den letzten sieben Tagen erstellt wurden, können Sie die NOW()-Funktion wie folgt verwenden.
SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
Diese Abfrage ruft alle Datensätze ab, die innerhalb der letzten sieben Tage ab dem aktuellen Datum und der aktuellen Uhrzeit erstellt wurden. Die NOW()-Funktion ist äußerst effektiv für zeitabhängige Datenextraktion.
5. Wichtige Überlegungen bei der Verwendung der NOW()-Funktion
Es gibt mehrere wichtige Punkte, die bei der Verwendung der NOW()-Funktion zu beachten sind. Insbesondere kann sie die Transaktionskonsistenz beeinflussen, daher ist es wichtig, sie je nach Kontext angemessen zu verwenden.
- Verhalten innerhalb von Transaktionen : Die NOW()-Funktion liefert ein konsistentes Ergebnis innerhalb einer Transaktion, d.h., sie gibt denselben Zeitstempel auch bei langlaufenden Prozessen zurück. Das ist wichtig für die Aufrechterhaltung der Datenkonsistenz. Wenn jedoch Echtzeit‑Zeitstempel erforderlich sind, ist die Verwendung von SYSDATE() geeigneter.
Zusätzlich kann die NOW()-Funktion, da sie von der Zeitzoneneinstellung abhängt, je nach Systemkonfiguration unterschiedliche Ergebnisse liefern. In globalen Anwendungen ist es unerlässlich, das Design unter Berücksichtigung von Zeitzonen zu planen.


