Bei SQL-Befehlen für Datums- und Zeitwerte muss beachtet werden, dass jeder SQL-Client für die Datums- und Zeitfunktionen eigene Befehle hat. Ich stelle die gängigen Befehle für HeidiSQL/MySQL vor.
Das Systemdatum und die Systemuhrzeit kann mit folgenden Befehlen abgefragt werden:
CURRENT_DATE: gibt das aktuelle Datum aus
CURRENT_TIME: gibt die aktuelle Zeit aus
CURRENT_TIMESTAMP: gibt das aktuelle Datum inklusive der aktuellen Zeit aus
select CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP
- Datumsfunktionen:
Mit folgenden Funktionen kann nur ein Teil des Datums ausgegeben werden:
YEAR(date): gibt das Jahr des angegebenen Datums aus
MONTH(date): gibt den Monat des angegebenen Datums aus
DAY(date): gibt den Tag des angegebenen Datums aus
SELECT CURRENT_DATE, YEAR(CURRENT_DATE) AS YEAR, MONTH(CURRENT_DATE) AS MONTH, DAY(CURRENT_DATE) AS DAY
Bei einer Zeitspalte ohne Datum, nur mit Uhrzeit, sind die Datumsfunktionen natürlich unzulässig.
Weitere Informationen zum Datum geben folgende Funktionen aus:
DAYOFWEEK(date): gibt den Wochentag als Zahl aus (1 für Sonntag usw.)
DAYNAME(date): gibt den Wochentag als Namen aus
MONTHNAME(date): gibt den Monat als Namen aus
LAST_DAY(date): gibt den letzten Tag des Monats aus
In der Beispieldatenbank Sakila kann aus der Tabelle rental z.B. das Ausleihdatum ausgegeben und bearbeitet werden:
SELECT rental_date, day(rental_date), DAYOFWEEK(rental_date), DAYNAME(rental_date) FROM rental
Daten ermitteln bzw. berechnen:
DATE_SUB(date, INTERVAL value type_of_interval): gibt ein Datum in der Vergangenheit von ‚date‘ aus. ‚Type_of_value‘ entspricht der Einheit, die abgezogen werden soll und ‚value‘ entspricht dem Wert der abgezogen werden soll.
DATE_ADD(date, INTERVAL value type_of_interval): gibt ein Datum in der Zukunft von ‚date‘ aus. ‚Type_of_value‘ entspricht der Einheit, die hinzugefügt werden soll und ‚value‘ entspricht dem Wert der hinzugezählt werden soll.
TIMESTAMPDIFF(unit, date1, date2): Gibt die Differenz zwischen 2 Daten (date2 – date1) in der Einheit ‘unit‘ aus. Zu beachten ist, das TIMESTAMPDIFF die Anzahl der vollständigen unit-Intervalle ausgibt. Es werden keine angebrochenen Intervalle berücksichtigt.
type_of_interval + unit können folgende Einheiten annehmen: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MICROSECOND
So kann ohne Probleme die Ausleihdauer ausgegeben werden, oder ein Ausleihende nach z.B. 8 Tagen berechnet werden:
SELECT rental_date, LAST_DAY(rental_date), return_date, TIMESTAMPDIFF(DAY, rental_date, return_date) AS Ausleihdauer, date_add(rental_date, INTERVAL 8 DAY) AS Ausleihende FROM rental
Die Berechnung solcher Intervalle ist für Abfragen sehr hilfreich. Z. B. um alle Datensätze auszugeben, in denen ein Film 8 Tage oder länger ausgeliehen wurde:
SELECT rental_id, rental_date, return_date, DATEDIFF(return_date, rental_date) AS Ausleihdauer FROM rental
WHERE return_date > date_add(rental_date, INTERVAL 8 DAY)
- Zeitfunktionen
Analog zu den Datumsfunktionen kann mit folgenden Funktionen auch nur ein Teil des Zeitwertes ausgegeben werden:
HOUR(date): gibt die Stundedes angegebenen Datums aus
MINUTE(date): gibt den Monat des angegebenen Datums aus
SECOND(date): gibt den Tag des angegebenen Datums aus
SELECT CURRENT_TIME, HOUR(CURRENT_TIME), MINUTE(CURRENT_TIME), SECOND(CURRENT_TIME)
Bei einer Datumsspalte ohne Uhrzeit sind die Zeitfunktionen unzulässig.
Die Funktionen von oben, wie TIMESTAMPDIFF können analog auch Zeitspannen in Stunden etc. berechnen.