SQL - Datum und Uhrzeit: Ein umfassender Leitfaden für Anfänger

Hallo da draußen, zukünftige Datenbank-Zauberer! Heute tauchen wir ein in die faszinierende Welt von Daten und Zeiten in SQL. Als dein freundlicher Nachbarschafts-Computerlehrer bin ich hier, um dich auf dieser Reise mit vielen Beispielen und Erklärungen zu führen. Also, nimm deine virtuelle Zeitmaschine und los geht's!

SQL - Date & Time

Datum und Uhrzeit-Datentypen in SQL

Bevor wir mit dem Manipulieren von Daten und Zeiten beginnen, müssen wir verstehen, wie SQL diese Informationen speichert. Stell dir diese Datentypen als spezielle Behälter vor, die speziell für zeitliche Daten konzipiert sind.

DATE

Der DATE-Datentyp speichert ein Datum im Format JJJJ-MM-TT.

CREATE TABLE events (
event_id INT PRIMARY KEY,
event_name VARCHAR(100),
event_date DATE
);

INSERT INTO events (event_id, event_name, event_date)
VALUES (1, 'Firmenpicknick', '2023-07-15');

In diesem Beispiel erstellen wir eine events-Tabelle und fügen ein Firmenpicknick hinzu, das am 15. Juli 2023 geplant ist. Der DATE-Datentyp stellt sicher, dass wir nur das Datum ohne jegliche Zeitinformationen speichern.

TIME

Der TIME-Datentyp speichert die Uhrzeit im Format HH:MI:SS.

CREATE TABLE class_schedule (
class_id INT PRIMARY KEY,
class_name VARCHAR(100),
start_time TIME
);

INSERT INTO class_schedule (class_id, class_name, start_time)
VALUES (1, 'Einführung in SQL', '09:30:00');

Hier erstellen wir einen Stundenplan und fügen eine SQL-Klasse hinzu, die um 9:30 Uhr beginnt. Der TIME-Datentyp ermöglicht es uns, diese Uhrzeit präzise zu speichern.

DATETIME

Der DATETIME-Datentyp kombiniert sowohl Datum als auch Uhrzeit, typischerweise im Format JJJJ-MM-TT HH:MI:SS.

CREATE TABLE appointments (
appointment_id INT PRIMARY KEY,
patient_name VARCHAR(100),
appointment_datetime DATETIME
);

INSERT INTO appointments (appointment_id, patient_name, appointment_datetime)
VALUES (1, 'John Doe', '2023-06-20 14:30:00');

In diesem Beispiel planen wir einen Arzttermin für John Doe am 20. Juni 2023 um 14:30 Uhr. Der DATETIME-Datentyp ermöglicht es uns, sowohl das Datum als auch die Uhrzeit in einer Spalte zu speichern.

TIMESTAMP

Der TIMESTAMP-Datentyp ist ähnlich wie DATETIME, wird jedoch oft verwendet, um zu verfolgen, wann ein Eintrag zuletzt geändert wurde.

CREATE TABLE blog_posts (
post_id INT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

INSERT INTO blog_posts (post_id, title, content)
VALUES (1, 'Mein erster Blogeintrag', 'Hallo, Welt!');

In diesem Beispiel wird die last_updated-Spalte automatisch auf das aktuelle Datum und die aktuelle Uhrzeit gesetzt, wenn ein Eintrag inserted oder aktualisiert wird.

Datum und Uhrzeit-Funktionen in SQL

Nun, da wir wissen, wie wir Daten und Zeiten speichern, lassen uns einige der magischen Funktionen erkunden, die SQL zur Manipulation dieser Daten bietet. Ich mag es, diese Funktionen als zeitreisende Werkzeuge in unserem SQL-Werkzeugkasten zu betrachten!

Aktueller Tag und Uhrzeit

Lassen wir mit den Grundlagen beginnen - das aktuelle Datum und die aktuelle Uhrzeit abrufen.

SELECT CURRENT_DATE() AS today,
CURRENT_TIME() AS current_time,
NOW() AS current_datetime;

Diese Abfrage gibt dir das aktuelle Datum, die aktuelle Uhrzeit und das aktuelle Datum und die aktuelle Uhrzeit. Es ist, als würde man SQL fragen: "Hey, wie spät ist es?" Praktisch, oder?

Herausnehmen von Teilen eines Datums

Manchmal benötigen wir nur spezifische Teile eines Datums. SQL hat Funktionen für genau das!

SELECT YEAR('2023-06-20') AS year,
MONTH('2023-06-20') AS month,
DAY('2023-06-20') AS day,
WEEKDAY('2023-06-20') AS weekday;

Diese Abfrage extrahiert das Jahr, den Monat, den Tag und den Wochentag vom angegebenen Datum. Es ist, als würden wir ein Datum sezieren, um die Informationen zu erhalten, die wir benötigen.

Datum Arithmetic

SQL ermöglicht es uns, arithmetische Operationen auf Daten durchzuführen. Dies ist besonders nützlich für die Berechnung von Zeiträumen oder das Finden von zukünftigen/vergangenen Daten.

SELECT DATE_ADD('2023-06-20', INTERVAL 7 DAY) AS week_later,
DATE_SUB('2023-06-20', INTERVAL 1 MONTH) AS month_ago,
DATEDIFF('2023-12-31', '2023-06-20') AS days_until_new_year;

In diesem Beispiel fügen wir 7 Tage zu einem Datum hinzu, subtrahieren 1 Monat von einem Datum und berechnen die Anzahl der Tage zwischen zwei Daten. Es ist, als hätten wir eine Zeitmaschine an unseren Fingerspitzen!

Formatierung von Daten

Manchmal müssen wir Daten in einem bestimmten Format präsentieren. Die DATE_FORMAT-Funktion kommt uns hierbei zu Hilfe.

SELECT DATE_FORMAT('2023-06-20', '%W, %M %d, %Y') AS formatted_date,
DATE_FORMAT('2023-06-20 14:30:00', '%h:%i %p') AS formatted_time;

Diese Abfrage formatiert das Datum als "Dienstag, Juni 20, 2023" und die Uhrzeit als "02:30 PM". Es ist, als würden wir unsere Daten für einen festlichen Anlass ankleiden!

Hier ist eine Tabelle mit einigen commonly verwendeten Formatangaben:

Angabe Beschreibung Beispiel
%Y 4-stellige Jahreszahl 2023
%y 2-stellige Jahreszahl 23
%M Monatsname Januar
%m Monat (01-12) 01
%d Tag des Monats (01-31) 01
%W Wochentag-Name Montag
%w Tag der Woche (0-6, 0 ist Sonntag) 1
%H Stunde (00-23) 13
%h Stunde (01-12) 01
%i Minuten (00-59) 30
%s Sekunden (00-59) 45
%p AM oder PM PM

Alles zusammenbringen

Lassen wir mit einem komplexeren Beispiel schließen, das mehrere Konzepte kombiniert:

CREATE TABLE user_logins (
login_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
login_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO user_logins (user_id) VALUES (1), (2), (3);

SELECT
user_id,
login_time,
DATE_FORMAT(login_time, '%W, %M %d, %Y at %h:%i %p') AS formatted_login_time,
CASE
WHEN WEEKDAY(login_time) IN (5, 6) THEN 'Wochenend-Login'
ELSE 'Wochentags-Login'
END AS login_type,
TIMESTAMPDIFF(HOUR, login_time, NOW()) AS hours_since_login
FROM user_logins
WHERE login_time > DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK);

In diesem Beispiel erstellen wir eine user_logins-Tabelle, fügen einige Daten hinzu und dann abfragen wir sie mit verschiedenen Datum und Uhrzeit-Manipulationen. Wir formatieren die Login-Zeit, bestimmen, ob es ein Wochenende- oder Wochentags-Login war, und berechnen, wie viele Stunden seit dem Login vergangen sind.

Und das war's, Leute! Wir haben mit SQL durch die Zeit gereist, indem wir Datum und Uhrzeit-Datentypen und -Funktionen gelernt haben. Denke daran, Übung macht den Meister, also habe keine Angst, mit diesen Konzepten zu experimentieren. Vor dir liesst du, wirst du in der Lage sein, die Zeit in deinen Datenbanken zu biegen!

Credits: Image by storyset