MySQL Leitfaden zur aktuellen Zeit: NOW(), CURRENT_TIMESTAMP, DATE_FORMAT, Zeitzoneneinstellungen & bewährte Verfahren

目次

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_TIMESTAMP usw.)
  • 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.

FunctionReturnsExample
NOW()Current date and time (date + time)SELECT NOW();2025-02-11 16:00:00
CURRENT_TIMESTAMPSame as NOW() (SQL standard)SELECT CURRENT_TIMESTAMP;
CURDATE()Current date onlySELECT CURDATE();2025-02-11
CURTIME()Current time onlySELECT 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?

PurposeRecommended Function
Retrieve both date and timeNOW() or CURRENT_TIMESTAMP
Retrieve date onlyCURDATE()
Retrieve time onlyCURTIME()

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

SpecifierMeaningExample (2025-02-11 16:45:30)
%Y4-digit year2025
%m2-digit month (01-12)02
%d2-digit day (01-31)11
%HHour (00-23, 24-hour format)16
%iMinutes (00-59)45
%sSeconds (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.

FunctionReturnsSQLOutput Example (2025-02-11 16:45:30)
YEAR()YearSELECT YEAR(NOW());2025
MONTH()MonthSELECT MONTH(NOW());2
DAY()DaySELECT 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
UnitMeaningExample
SECONDSecondsNOW() + INTERVAL 10 SECOND
MINUTEMinutesNOW() + INTERVAL 5 MINUTE
HOURHoursNOW() + INTERVAL 2 HOUR
DAYDaysNOW() + INTERVAL 10 DAY
MONTHMonthsNOW() + 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

TypeAffected by Time ZoneCan Set CURRENT_TIMESTAMP as Default
TIMESTAMPYesYes
DATETIMENoNo

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 CaseRecommended
Retrieve the current time in a SELECT statementNOW()
Automatically set the current time during INSERTCURRENT_TIMESTAMP
Set as the default value of a TIMESTAMP columnCURRENT_TIMESTAMP

Wann TIMESTAMP vs DATETIME verwenden

Data TypeAffected by Time ZoneStorage Size
TIMESTAMPYes4 bytes
DATETIMENo8 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;