English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL-Daten und Zeit

In diesem教程, werden Sie lernen, wie man Datum und Zeit in SQL verwendet.

Datum- und Zeitverarbeitung

Abgesehen von Zeichenfolgen und Zahlen müssen Sie oft Datum und/oder Zeitwerte, z.B. das Geburtsdatum eines Benutzers, das Einstellungsdatum eines Mitarbeiters, das Datum eines zukünftigen Ereignisses, das Datum und die Uhrzeit der Erstellung oder Änderung einer bestimmten Zeile in der Tabelle usw.

Diese Art von Daten wird als temporäre Daten bezeichnet und jede Datenbankengine hat einen Standard-Speicherformat und -Datentyp für deren Speicherung. Der nachstehende Tisch zeigt die von der MySQL-Datenbankserver unterstützten Datentypen für die Verarbeitung von Datum und Zeit.

TypVoreingestelltes FormatGültige Werte
DATEYYYY-MM-DD1000-01-01 - 9999-12-31
TIMEHH:MM:SS oder HHH:MM:SS-838:59:59 - 838:59:59
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 - 9999-12-31 23:59:59
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:00 - 2037-12-31 23:59:59
YEARYYYY1901 - 2155

Das Format der DATE-Werte ist YYYY-MM-DD, wobei YYYY das Jahr des gesamten Jahres darstellt (4Stellenzahlen), MM und DD stellen die Monat- und Tageskomponenten des Datums dar (zwei vorangestellte Nullen). Zeitwerte werden in der Regel im Format HH:MM:SS angegeben, wobei HH, MM und SS die Stunden-, Minuten- und Sekundenkomponenten der Zeit darstellen.

Nachfolgendes Statement zeigt, wie man Datumswerte in eine Tabelle der Datenbank einfügt:

INSERT INTO employees (emp_name, hire_date, salary)
VALUES ('Adam Smith', '2015-06-24' 4500);

Hinweis:In MySQL kann der Wert der Stundenkomponente größer sein, da MySQL sie als Laufzeit ansieht. Dies bedeutet, dass der Zeitdatentyp nicht nur zur Angabe einer Zeit am Tag (muss kleiner als24Stunden), kann auch zur Angabe der Zeitspanne zwischen zwei Ereignissen verwendet werden, die möglicherweise größer ist als24Stunden, sogar negative Werte.

Verfolgung der Erstellungs- oder Änderungszeit einer Zeile

Bei der Verwendung von Datenbanken großer Anwendungen muss in der Regel die Erstellungszeit oder die letzte Änderungszeit der Aufzeichnungen in der Datenbank gespeichert werden, z.B. das Datum und die Uhrzeit der Registrierung des Benutzers oder der letzten Änderung des Passworts des Benutzers.

In MySQL können Sie die Funktion NOW() verwenden, um den aktuellen Zeitstempel einzufügen, wie folgt:

-- Syntax des MySQL-Datenbankmanagementsystems
INSERT INTO users (name, birth_date, created_at)
VALUES ('Bilbo Baggins', '1998-04-16', NOW());

Wenn Sie jedoch nicht manuell das aktuelle Datum und die Uhrzeit eingeben möchten, verwenden Sie einfach die automatische Initialisierung und Aktualisierungseigenschaften der DATETIME- und TIMESTAMP-Datenarten.

Um automatische Eigenschaften zu zuweisen, geben Sie die Klauseln DEFAULT CURRENT_TIMESTAMP und ON UPDATE CURRENT_TIMESTAMP im Spaltendefiniton an, wie folgt:

-- Syntax des MySQL-Datenbankmanagementsystems
CREATE TABLE users (
    id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL UNIQUE,
    birth_date DATE NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Hinweis:Die automatische Initialisierung und Aktualisierung von DATETIME-Datenarten ist nur in MySQL 5.6.5oder höherer Versionen verfügbar. Verwenden Sie bitte TIMESTAMP, wenn Sie eine ältere Version verwenden.

Teil eines Datums oder einer Uhrzeit extrahieren

In einigen Fällen möchten Sie möglicherweise nur einen Teil des Datums oder der Uhrzeit erhalten. In MySQL können Sie speziell für die Extraktion von Teilen von Zeitwerten entworfene Funktionen wie YEAR(), MONTH(), DAYOFMONTH(), MONTHNAME(), DAYNAME(), HOUR(), MINUTE(), SECOND() und andere verwenden.

Das folgende SQL-Statement extrahiert das Jahr aus dem Wert der Spalte birth_date, z.B. Wenn das Geburtsdatum eines jeden Benutzers ist1987-01-14dann wird YEAR(birth_date)1987.

mysql> SELECT name, YEAR(birth_date) FROM users;

Gleichzeitig können Sie die Funktion DAYOFMONTH() verwenden, um einen bestimmten Tag eines Monats zu erhalten, z.B. Wenn das birth_date eines jeden Benutzers ist1986-10-06Dann wird DAYOFMONTH(birth_date) zurückgeben.6.

mysql> SELECT name, DAYOFMONTH(birth_date) FROM users;

Datum oder Zeit formatieren

Wenn eine beschreibendere und lesbarere Datumsformat im Ergebnis verwendet werden soll, können die DATE_FORMAT() und TIME_FORMAT() -Funktionen verwendet werden, um bestehende Datum- und Zeitwerte neu zu formatieren.

Der obige SQL-Ausdruck wird in einer lesbarereren Form angezeigt.usersin der Tabellebirth_dateFormat der Wert der Spalte, zum Beispiel1987Jahr1Monat14bis zum1987Jahr1Monat14Wert des Tages.

mysql> SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;