Teile von Text
Oft brauchst du nur einen Teil eines Textes: das Jahr eines Datums, die ersten Buchstaben eines Namens, die Domain einer E-Mail-Adresse. SUBSTR(text, start, laenge) (von „substring“, Teilzeichenkette) schneidet laenge Zeichen aus, beginnend mit dem Zeichen an der Position start. Die Positionen werden ab 1 gezählt:
SELECT SUBSTR('Dragon Forge', 1, 6) AS erstes_wort, SUBSTR('Dragon Forge', 8) AS rest;| erstes_wort | rest |
|---|---|
| Dragon | Forge |
Ohne das dritte Argument geht SUBSTR bis zum Ende des Textes. Und da Datumsangaben Texte sind, ist SUBSTR(erschienen, 1, 4) das Jahr, in dem ein Spiel erschienen ist, und SUBSTR(erschienen, 6, 2) der Monat.
INSTR(text, teil) findet, wo ein Teil eines Textes steht: Es liefert die Position, an der der Teil beginnt, oder 0, wenn der Text ihn nicht enthält. INSTR('emma.becker@mail.de', '@') ist 12. Zusammen mit SUBSTR kann es einen Text an einem Zeichen durchschneiden, egal wo es steht. Der Benutzername einer E-Mail-Adresse ist alles vor dem @:
SELECT email,
INSTR(email, '@') AS at_position,
SUBSTR(email, 1, INSTR(email, '@') - 1) AS benutzername
FROM kunden
ORDER BY id
LIMIT 3;| at_position | benutzername | |
|---|---|---|
| emma.becker@mail.de | 12 | emma.becker |
| lukas.neumann@mail.de | 14 | lukas.neumann |
| olivia@braunfamilie.net | 7 | olivia |
Lies die letzte Spalte von innen nach außen: INSTR findet das @, - 1 geht ein Zeichen zurück, und SUBSTR nimmt so viele Zeichen vom Anfang.
REPLACE(text, alt, neu) ersetzt jedes Vorkommen eines Textes durch einen anderen. Für seine Hashtags entfernt der Shop die Leerzeichen aus den Titeln, indem er sie durch einen leeren Text ersetzt:
SELECT titel, '#' || REPLACE(titel, ' ', '') AS hashtag
FROM spiele
LIMIT 3;| titel | hashtag |
|---|---|
| Dragon Forge | #DragonForge |
| Pixel Racer | #PixelRacer |
| Moon Farm | #MoonFarm |
TRIM(text) entfernt die Leerzeichen am Anfang und am Ende eines Textes; LTRIM und RTRIM entfernen sie nur links oder nur rechts. Die Daten des Shops sind sauber, aber Texte, die Leute in Formulare tippen, oft nicht, und 'Moon Farm ' ist nicht gleich 'Moon Farm'. Um die Leerzeichen zu sehen, setze Klammern um den Text:
SELECT '[' || ' Moon Farm ' || ']' AS ungetrimmt,
'[' || TRIM(' Moon Farm ') || ']' AS getrimmt;| ungetrimmt | getrimmt |
|---|---|
| [ Moon Farm ] | [Moon Farm] |
Mit einem zweiten Argument entfernt TRIM statt der Leerzeichen andere Zeichen: TRIM('...Super!!', '.!') ist Super.
Typischer Fehler: bei 0 anfangen zu zählen, wie es viele Programmiersprachen tun. SUBSTR(erschienen, 0, 4) liefert nur drei Zeichen, zum Beispiel 202, denn die Position 0 liegt vor dem Beginn des Textes. In SQL steht das erste Zeichen an der Position 1.
So schreibst du es:
Anweisungen
- 1
Jedes Spiel bekommt einen Code für das Lager: die ersten drei Buchstaben seines Titels in Großbuchstaben, einen Bindestrich und seine ID, zum Beispiel
DRA-1. Zeige den Code alscodeund den Titel, sortiert nach der ID:code titel DRA-1 Dragon Forge PIX-2 Pixel Racer MOO-3 Moon Farm … … - 2
Zeige darunter den Namen jedes Kunden und die Domain seiner E-Mail-Adresse, alles nach dem @, als
domain. Sortiere die Kunden nach der ID:name domain Emma Becker mail.de Lukas Neumann mail.de Olivia Braun braunfamilie.net … … - 3
Und für die Adressen der Seiten des Shops zeige den Titel jedes Spiels und seinen
slug: den Titel in Kleinbuchstaben, mit Bindestrichen statt Leerzeichen, zum Beispieldragon-forge. Sortiere die Spiele nach dem Titel:titel slug Bakery Story bakery-story Castle Siege castle-siege Cube Logic cube-logic … …