Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 4 von 424/57 im Kurs~10 min
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
-- SQL standard:
CAST(123 AS TEXT)

-- PostgreSQL shorthand (più comune nella pratica):
123::text

Die beiden Formen sind identisch. Die Abkürzung ::type ist kompakter und Lässt sich gut mit anderen Ausdrücken verketten:

SQL
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

SQL
TIMESTAMPDATE          ordered_at::date
NUMERICINTEGER       price::int           -- tronca!
INTEGERNUMERIC       quantity::numeric    -- per evitare div. intera
INTEGERTEXT          id::text             -- per concatenare con ||
TEXTDATE          '2024-03-05'::date
NUMERICTEXT          price::text          -- per LIKE su numeri

Wenn ein Wurf scheitern kann

SQL
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.

SQL
SELECT '2', '10', '1' ORDER BY 1;  -- '1', '10', '2'   (alfabetico!)

Lösung: in ORDER BY umwandeln:

SQL
SELECT code FROM articles ORDER BY code::int;

Probieren Sie es aus

Übung#sql.m6.l4.e1
Versuche: 0Wird geladen…

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.

Editor wird geladen…
Hinweis anzeigen

Der Cast TIMESTAMP → DATE löscht die Zeit: ordered_at::date.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#sql.m6.l4.e2
Versuche: 0Wird geladen…

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.

Editor wird geladen…
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