SQL Abfrage - Das Jahr aus Datum & Uhrzeit?

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'


wotan38  25.10.2017, 13:46

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.

0

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