- 1 1. Einführung
- 2 2. Wie man die aktuelle Zeit in MySQL abrufen kann
- 3 3. Wie man die aktuelle Zeit in MySQL formatiert
- 4 4. Datums-/Zeitberechnungen mit der aktuellen Zeit in MySQL
- 5 5. MySQL-Zeitzoneneinstellungen
- 6 6. Wie man die aktuelle Zeit als Standardwert in MySQL festlegt
- 7 7. Häufige MySQL-Fehler und Lösungen (FAQ)
- 8 8. Best Practices für den Umgang mit der aktuellen Zeit in MySQL
1. Einführung
Wann müssen Sie die aktuelle Zeit in MySQL handhaben?
In MySQL ist das Abrufen der aktuellen Zeit in vielen verschiedenen Szenarien erforderlich. Zum Beispiel sind die folgenden Anwendungsfälle üblich:
- Automatisches Einfügen eines Zeitstempels beim Registrieren von Daten
- Zum Beispiel das Aufzeichnen des Erstellungsdatums und -zeits beim Speichern von Bestelldaten oder Log-Daten.
- Filtern von Daten basierend auf der aktuellen Zeit
- Zum Beispiel das Abrufen nur von Daten aus den letzten 7 Tagen oder das Suchen nach Datensätzen mit zukünftigen Daten.
- Formatieren von Daten und Zeiten für die Anzeige
- Formatieren von Datum- und Zeitwerten für eine bessere Lesbarkeit beim Generieren von Berichten.
- Verwalten von Datenablauf unter Verwendung der aktuellen Zeit
- Zum Beispiel das Bestimmen, ob ein Gutschein noch gültig ist, indem er mit der aktuellen Zeit verglichen wird.
Wie Sie sehen, ist das ordnungsgemäße Abrufen und Manipulieren der aktuellen Zeit in MySQL eine wichtige Fähigkeit in der Datenbankverwaltung.
Was Sie in diesem Artikel lernen werden
Dieser Artikel erklärt die folgenden Themen im Detail:
- Wie man die aktuelle Zeit in MySQL abrufen kann (
NOW(),CURRENT_TIMESTAMPusw.) - Wie man Datum- und Zeitformate ändert (mit
DATE_FORMAT()) - Datums- und Zeitberechnungen mit der aktuellen Zeit (mit
INTERVAL) - Wie man die Zeitzone ändert (
SET SESSION time_zone) - Verwendung der aktuellen Zeit als Standardwert (
CURRENT_TIMESTAMP) - Häufige Fehler und wie man sie behebt (FAQ)
Von den Grundlagen bis zur fortgeschrittenen Nutzung des Handhabens der „aktuellen Zeit“ in MySQL bietet dieser Leitfaden praktische SQL-Beispiele. Lesen Sie unbedingt bis zum Ende.
2. Wie man die aktuelle Zeit in MySQL abrufen kann
Liste der Funktionen zum Abrufen der aktuellen Zeit in MySQL
MySQL stellt mehrere Funktionen zum Abrufen der aktuellen Zeit zur Verfügung. Verstehen Sie die Unterschiede und verwenden Sie sie angemessen.
| Function | Returns | Example |
|---|---|---|
NOW() | Current date and time (date + time) | SELECT NOW(); → 2025-02-11 16:00:00 |
CURRENT_TIMESTAMP | Same as NOW() (SQL standard) | SELECT CURRENT_TIMESTAMP; |
CURDATE() | Current date only | SELECT CURDATE(); → 2025-02-11 |
CURTIME() | Current time only | SELECT CURTIME(); → 16:00:00 |
NOW()-Funktion
NOW() ist die am häufigsten verwendete Funktion in MySQL, um die aktuelle Zeit abzurufen.
Sie gibt sowohl das Datum als auch die Zeit zurück.
SELECT NOW();
Ausgabebeispiel:
2025-02-11 16:00:00
NOW()gibt die aktuelle Systemzeit zurück.- Da sie von der Zeitzone beeinflusst wird, kann die angezeigte Zeit je nach Ihrer Umgebung unterschiedlich sein (im Abschnitt „Zeitzoneneinstellungen“ detailliert erklärt).
Verwendung von CURRENT_TIMESTAMP
CURRENT_TIMESTAMP verhält sich fast identisch mit NOW(). Es entspricht dem SQL-Standard und kann auch in anderen Datenbanken verwendet werden.
SELECT CURRENT_TIMESTAMP;
Ausgabebeispiel:
2025-02-11 16:00:00
Nur das Datum mit CURDATE() abrufen
CURDATE() wird verwendet, wenn Sie nur das aktuelle Datum (Jahr, Monat, Tag) abrufen möchten.
SELECT CURDATE();
Ausgabebeispiel:
2025-02-11
Nur die Zeit mit CURTIME() abrufen
Wenn Sie nur die aktuelle Zeit (Stunde, Minute, Sekunde) abrufen möchten, verwenden Sie CURTIME().
SELECT CURTIME();
Ausgabebeispiel:
16:00:00
Welche Funktion sollten Sie verwenden?
| Purpose | Recommended Function |
|---|---|
| Retrieve both date and time | NOW() or CURRENT_TIMESTAMP |
| Retrieve date only | CURDATE() |
| Retrieve time only | CURTIME() |
3. Wie man die aktuelle Zeit in MySQL formatiert
Benutzerdefiniertes Formatieren mit DATE_FORMAT()
Grundlegende Syntax von DATE_FORMAT()
In MySQL können Sie die Funktion DATE_FORMAT() verwenden, um das Format von Daten und Zeiten frei zu ändern.
SELECT DATE_FORMAT(datetime_value, 'format_specifiers');
Beispiel: Konvertieren von NOW() in das Format YYYY/MM/DD HH:MM
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');
Ausgabe:
2025/02/11 16:45
Liste gängiger Formatangaben
| Specifier | Meaning | Example (2025-02-11 16:45:30) |
|---|---|---|
%Y | 4-digit year | 2025 |
%m | 2-digit month (01-12) | 02 |
%d | 2-digit day (01-31) | 11 |
%H | Hour (00-23, 24-hour format) | 16 |
%i | Minutes (00-59) | 45 |
%s | Seconds (00-59) | 30 |
Nur den Zeitteil mit TIME() extrahieren
Wenn Sie nur den Zeitanteil aus dem Datetime extrahieren möchten, das von NOW() zurückgegeben wird, verwenden Sie die Funktion TIME().
SELECT TIME(NOW());
Ausgabe:
16:45:30
Teile mit YEAR(), MONTH() und DAY() extrahieren
Um nur spezifische Teile zu extrahieren, verwenden Sie die folgenden Funktionen.
| Function | Returns | SQL | Output Example (2025-02-11 16:45:30) |
|---|---|---|---|
YEAR() | Year | SELECT YEAR(NOW()); | 2025 |
MONTH() | Month | SELECT MONTH(NOW()); | 2 |
DAY() | Day | SELECT DAY(NOW()); | 11 |
Praktische Beispiele für das Formatieren
Das folgende SQL ist nützlich, um verschiedene Formate in der Praxis auszuprobieren.
SELECT
NOW() AS 'Original datetime',
DATE_FORMAT(NOW(), '%Y/%m/%d') AS 'YYYY/MM/DD format',
DATE_FORMAT(NOW(), '%H:%i:%s') AS 'HH:MM:SS',
TIME(NOW()) AS 'Time only',
YEAR(NOW()) AS 'Year',
MONTH(NOW()) AS 'Month',
DAY(NOW()) AS 'Day';

4. Datums-/Zeitberechnungen mit der aktuellen Zeit in MySQL
Hinzufügen/Entfernen mit INTERVAL
Grundsyntax
SELECT current_datetime + INTERVAL number unit;
SELECT current_datetime - INTERVAL number unit;
Zeit hinzufügen basierend auf NOW()
Zum Beispiel, um das Datum/Zeit „eine Woche später“ abzurufen:
SELECT NOW() + INTERVAL 7 DAY;
Beispielausgabe:
2025-02-18 16:30:00
| Unit | Meaning | Example |
|---|---|---|
| SECOND | Seconds | NOW() + INTERVAL 10 SECOND |
| MINUTE | Minutes | NOW() + INTERVAL 5 MINUTE |
| HOUR | Hours | NOW() + INTERVAL 2 HOUR |
| DAY | Days | NOW() + INTERVAL 10 DAY |
| MONTH | Months | NOW() + INTERVAL 3 MONTH |
Berechne die Differenz zwischen zwei Daten mit DATEDIFF()
SELECT DATEDIFF(NOW(), '2025-01-01');
Beispielausgabe:
30
Filtern nach einem Datumsbereich mit BETWEEN
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';
5. MySQL-Zeitzoneneinstellungen
Aktuelle Zeitzone prüfen
SHOW VARIABLES LIKE '%time_zone%';
Beispielausgabe:
+------------------+----------------+
| Variable_name | Value |
+------------------+----------------+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+------------------+----------------+
Zeitzone pro Sitzung ändern
SET SESSION time_zone = 'Asia/Tokyo';
Standardzeitzone des Servers ändern
Fügen Sie Folgendes zur Konfigurationsdatei (my.cnf) hinzu:
[mysqld]
default_time_zone = 'Asia/Tokyo'
UTC-Zeit mit UTC_TIMESTAMP erhalten
SELECT UTC_TIMESTAMP();
In lokale Zeit umwandeln mit CONVERT_TZ()
SELECT CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', 'Asia/Tokyo');
6. Wie man die aktuelle Zeit als Standardwert in MySQL festlegt
CURRENT_TIMESTAMP als Standardwert festlegen
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Automatische Updates mit ON UPDATE CURRENT_TIMESTAMP
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Unterschied zwischen DATETIME und TIMESTAMP
| Type | Affected by Time Zone | Can Set CURRENT_TIMESTAMP as Default |
|---|---|---|
TIMESTAMP | Yes | Yes |
DATETIME | No | No |
Warum Sie NOW() nicht als Standardwert verwenden können und die Lösung
ERROR 1067 (42000): Invalid default value for 'created_at'
Lösung:
CREATE TRIGGER set_created_at
BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();
7. Häufige MySQL-Fehler und Lösungen (FAQ)
NOW() kann nicht als Standardwert verwendet werden
Fehlerbeispiel
CREATE TABLE logs (
created_at DATETIME DEFAULT NOW()
);
ERROR 1067 (42000): Invalid default value for 'created_at'
Lösung
CREATE TABLE logs (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CURRENT_TIMESTAMP-Zeit ist inkorrekt
SHOW VARIABLES LIKE 'time_zone';
Lösung
SET SESSION time_zone = 'Asia/Tokyo';
NOW()-Ergebnis ist um eine Stunde verschoben
SHOW VARIABLES LIKE 'system_time_zone';
Lösung
SET GLOBAL time_zone = 'Asia/Tokyo';
BETWEEN-Bereichsfilterung funktioniert nicht wie erwartet
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01' AND '2025-02-28';
Lösung
SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';
8. Best Practices für den Umgang mit der aktuellen Zeit in MySQL
Wann NOW() vs CURRENT_TIMESTAMP verwenden
| Use Case | Recommended |
|---|---|
Retrieve the current time in a SELECT statement | NOW() |
Automatically set the current time during INSERT | CURRENT_TIMESTAMP |
Set as the default value of a TIMESTAMP column | CURRENT_TIMESTAMP |
Wann TIMESTAMP vs DATETIME verwenden
| Data Type | Affected by Time Zone | Storage Size |
|---|---|---|
TIMESTAMP | Yes | 4 bytes |
DATETIME | No | 8 bytes |
In UTC speichern und in lokale Zeit umwandeln
SELECT CONVERT_TZ(event_time, 'UTC', 'Asia/Tokyo');
Verwenden Sie >= und < anstelle von BETWEEN
SELECT * FROM orders
WHERE created_at >= '2025-02-01 00:00:00'
AND created_at < '2025-03-01 00:00:00';
Standardisieren Sie die Verwendung von INTERVAL
SELECT NOW() + INTERVAL 1 DAY;
Alte Daten ordnungsgemäß bereinigen
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 1 YEAR LIMIT 1000;


