Fehler abfangen in SQL

Hallo!
Ich steh ein wenig auf dem Schlauch. Ich muß QS für eine Menge Daten einer etwas kruden Excel-Datensammlung machen. Dafür hab ich die Daten in ein Datenmodell importiert, die einzelnen Werte sind, da dort (wer hätte das gedacht…) alles Mögliche drinsteht, als Text mit einer spalte (Soll-)Format hinterlegt. Nun will ich automatisiert die Werte in eine gültige Darstellung bringen. Dazu werden z.B. im Falle ‘numeric’ Kommas durch punkte ersetzt, dann soll versucht werden, den Wert zu konvertieren wenn wenn das nicht geht, auf NULL gesetzt werden.
Ich suche also in etwa sowas ähnliches wie dieses Gedankenexperiment:

case when format = 'numeric' then (replace(wert, ',', '.'))::numeric on error NULL end

Sprich, ich möchte den Fehler abfangen, der entsteht, wenn Buchstaben im Wert sind.

Ergänzung: Ich hab den Check jetzt während des Thread-Schreiben mit Regex so gelöst:

select (regexp_match(lower('1234.678'),'([0-9\.]+)'))[1] = lower('1234.678')

Trotzdem würde ich gern wissen ob man in einem SQL-Statement Fehler abfangen kann (ohne eine Funktion zu schreiben :wink: ).
Weil:
if you think you have solved a problem with regex, then you have two problems.

Andere Ideen dazu sind natürlich auch willkommen :slight_smile:
Viele Grüße
Uwe

Ich denke ohne eine Funktion wird das nicht zuverlässig gehen.

Danke, mittlerweise seh ich das auch so. Zur Korrektur von oben, falls jemand mal ein ähnliches Problem hat, das Regex geht auch besser:

regexp_match(replace(lower('1.234,678'), ',', '.'), '^(\d+)?([.]?\d+)?$')

Das Statement ersetzt Kommas durch Punkte und schaut ob genau ein Punkt zwischen Zahlen dabei ist. Wenn es ein Ergebnis gibt, ist das gültig, wenn das Ergebnis NULL ist ein Fehler. Für meine Anforderung reicht das in Moment.
Viele Grüße
Uwe

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Nachrichten mehr erlaubt.