Funktionen in WHERE und ORDER BY
Funktionen sind nicht nur für SELECT. Du kannst sie überall benutzen, wo ein Wert stehen kann, also auch in WHERE und ORDER BY. Welche Kunden sind 2024 beigetreten?
SELECT name, beigetreten
FROM kunden
WHERE strftime('%Y', beigetreten) = '2024';| name | beigetreten |
|---|---|
| Jonas Hartmann | 2024-01-08 |
| Mia Lange | 2024-03-19 |
| Leon Wagner | 2024-05-27 |
| Ida Zimmermann | 2024-08-14 |
| Oskar Klein | 2024-11-30 |
SQLite berechnet für jede Zeile die Funktion und prüft dann die Bedingung. Hier würde LIKE '2024-%' dieselben Kunden finden, aber mit Funktionen kannst du nach jedem Teil eines Wertes fragen, und die Bedingung sagt klar, worum es geht: strftime('%m', beigetreten) = '03' findet die Kunden, die in einem März beliebigen Jahres beigetreten sind, und LENGTH(name) > 11 die mit langen Namen.
Typischer Fehler: das Ergebnis von strftime mit einer Zahl vergleichen. WHERE strftime('%Y', beigetreten) = 2024 findet nichts, und es gibt auch keinen Fehler. strftime liefert einen Text, '2024', und für SQLite ist der Text '2024' nicht gleich der Zahl 2024: Das sind verschiedene Arten von Werten. Vergleiche es also mit einem Text in Anführungszeichen. Dasselbe gilt für SUBSTR, dessen Ergebnis auch ein Text ist.
Funktionen helfen auch, Texte zu vergleichen, deren Schreibweise du nicht kennst: WHERE LOWER(genre) = 'rpg' findet RPG-Spiele, egal wie das Genre geschrieben ist.
In ORDER BY sortiert eine Funktion die Zeilen nach einem berechneten Wert. Hier, beginnend mit dem kürzesten Namen:
SELECT name, LENGTH(name) AS zeichen
FROM kunden
ORDER BY LENGTH(name), name
LIMIT 3;| name | zeichen |
|---|---|
| Mia Lange | 9 |
| Max Krause | 10 |
| Emma Becker | 11 |
Wie du weißt, kann ORDER BY auch den Alias einer Spalte benutzen: ORDER BY zeichen, name sortiert genauso. In WHERE erlauben die meisten Datenbanken keine Aliase, weil sie die Bedingungen prüfen, bevor sie die Spalten des Ergebnisses berechnen. SQLite ist nachsichtig und erlaubt sie, aber in WHERE schreibst du besser die ganze Funktion noch einmal, damit deine Abfragen auch in anderen Datenbanken funktionieren.
So schreibst du es:
Anweisungen
- 1
Der Shop plant sein Weihnachtsgeschäft. Zeige die ID und das Datum der Bestellungen, die in einem Dezember beliebigen Jahres aufgegeben wurden, sortiert nach dem Datum:
id bestellt_am 13 2024-12-05 14 2024-12-20 15 2024-12-23 29 2025-12-12 30 2025-12-22 - 2
Zeige darunter die drei längsten Kommentare von Bewertungen und ihre Länge als
zeichen: den längsten zuerst, und Kommentare derselben Länge in alphabetischer Reihenfolge:kommentar zeichen Tolle Geschichte, ein bisschen lang. 36 Fantastische Weltraumschlachten. 32 Das beste RPG seit Jahren! 26