SQL Abfrage - Das Jahr aus Datum & Uhrzeit?
Hallo,
ich habe in der Datenbank ein Datum mit Uhrzeit gespeichert. Ich möchte gerne per SQL-Abfrage nur das Jahr aus dem Datum abfragen. Hat jemand eine Idee?
SELECT DISTINCT dateandclock FROM db WHERE .... ?
4 Antworten
In welchem Format ist das Datum denn gespeichert?
Wenn es ordentlich als DATE / DATETIME / TIMESTAMP gespeichert ist, dann kannst du einfach YEAR(spaltenname) benutzen, falls du es z.B. als VARCHAR oder ähnliches gespeichert hast, dann müsstest du vorher noch STR_TO_DATE(spaltenname, format) bzw bei INT ggf FROM_UNIXTIME() auf die Spalte anwenden.
Letzteres sollte man zwar nicht machen (also das Speichern als VARCHAR / INT), kommt aber halt noch recht häufig vor.
SELECT DISTINCT dateandclock FROM db
WHERE YEAR(spalte) = Jahreszahl
Beachte, dass hierbei keine Indizes verwendet werden können und daher die Abfrage eventuell lange dauert.
Eventuell könnte es schneller sein zu sagen:
SELECT DISTINCT dateandclock FROM db
WHERE spalte >= '2017-01-01' AND spalte < '2018-01-01'
Meine Datenbank (DB2 von IBM) benutzt bei year schon einen Index, wenn einer drauf ist. Das geht, weil die Datenbank das Datum als laufende Tages-Nr speichert. Wenn man z.B. nach dem Jahr 2017 sucht, nimmt die Datenbank alles beginnend mit dem '01.01.2017' und endend mit dem '31.12.2017'. Die Tagesnummern stehen da alle lückenlos hintereinander. Bei der Suche nach einem bestimmten Monat dauert das länger, weil die gesuchten Werte nicht hintereinander stehen. Die Suche im Index ist aber immer schneller, auch wenn alles von vorn bis hinten durchsucht werden muss.
Hallo,
ich gehe jetzt einfach davon aus, dass du
1. mysql benutzt (oder mariadb) und
2. das Datum in einer Spalte vom Typ DATETIME gespeichert ist:
probiere mal:
SELECT DISTINCT extract(year FROM dateandclock) FROM db WHERE ....
bzw. konsultiere die Doku hier:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_extract
Sollten 1 und 2 nicht stimmen, schreib es doch bitte dazu.
Viel Erfolg
Bei einer Spalte datum mit date als Datentyp kann man mit YEAR(datum) das Jahr aus dem Datum auslesen. Mit dem Datentyp timestamp müsste das auch gehen, habe das aber noch nie benutzt:
WHERE YEAR(dateandclock) = 2017