Lektionen des Moduls (4/4)
CAST und Typkonvertierungen
SQL ist stark typisiert: Jede Spalte hat einen Typ (INTEGER, TEXT,
NUMERIC, DATE, TIMESTAMP…) und viele Operationen erfordern die Typen
zu passen. Wenn dies nicht der Fall ist – oder wenn Sie einen Wert formatieren möchten
anders – Sie verwenden eine Besetzung.
Zwei äquivalente Syntaxen
-- SQL standard:
CAST(123 AS TEXT)
-- PostgreSQL shorthand (più comune nella pratica):
123::textDie beiden Formen sind identisch. Die Abkürzung ::type ist kompakter und
Lässt sich gut mit anderen Ausdrücken verketten:
SELECT ordered_at::date AS day,
(oi.quantity * oi.unit_price)::numeric(10,2) AS total,
id::text || ' - ' || email AS label
FROM …;Nützliche Umwandlungen auf den Datensatz
TIMESTAMP → DATE ordered_at::date
NUMERIC → INTEGER price::int -- tronca!
INTEGER → NUMERIC quantity::numeric -- per evitare div. intera
INTEGER → TEXT id::text -- per concatenare con ||
TEXT → DATE '2024-03-05'::date
NUMERIC → TEXT price::text -- per LIKE su numeriWenn ein Wurf scheitern kann
SELECT 'abc'::int; -- ERRORE: invalid input syntax for type integer
SELECT '12.5'::int; -- ERRORE: invalid input syntax for type integer
SELECT 12.5::int; -- 12 (cast numerico-numerico: arrotonda)Umwandlungen von Zeichenfolge → Zahl oder Zeichenfolge → Datum sind am riskantesten:
Sie lösen einen Fehler aus, wenn die Zeichenfolge nicht genau mit der erwarteten Zeichenfolge übereinstimmt
formatieren. In der Produktion ist es am besten, externe Daten zuerst zu validieren
mit TRIM / LOWER / Regex.
Besetzung und ORDER BY
Ein Fall, der subtile Fehler erzeugt: Sortieren von Zahlen, die als Text gespeichert sind.
SELECT '2', '10', '1' ORDER BY 1; -- '1', '10', '2' (alfabetico!)Lösung: in ORDER BY umwandeln:
SELECT code FROM articles ORDER BY code::int;Probieren Sie es aus
Zeigen Sie für jede Bestellung die ID und den Tag an (nur den Datumsteil von „ordered_at“ vom Typ „Datum“). Zwei Spalten. Nach ID bestellen.
Hinweis anzeigen
Der Cast TIMESTAMP → DATE löscht die Zeit: ordered_at::date.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Zeigen Sie für jeden Kunden eine Beschriftungsspalte an, in der ID und E-Mail durch „-“ getrennt verknüpft sind (z. B. „1 – alice.rossi@example.com“). Nach ID bestellen.
Hinweis anzeigen
Das || Der Operator erfordert Operanden desselben Typs: Die Umwandlung von ID in Text ist der sauberste Weg.
Lösung nach 3 Versuchen verfügbar