# Fehler abfangen in SQL

**URL:** https://www.pg-forum.de/t/fehler-abfangen-in-sql/12224
**Category:** SQL
**Created:** [16. April 2021 um 08:09 UTC](https://www.pg-forum.de/t/fehler-abfangen-in-sql/12224 "2021-04-16T08:09:03Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![Gisman](https://www.pg-forum.de/user_avatar/www.pg-forum.de/gisman/32/252_2.png) [@Gisman](https://www.pg-forum.de/u/Gisman)
#### Post date: [16. April 2021 um 08:09 UTC](https://www.pg-forum.de/t/fehler-abfangen-in-sql/12224/1 "2021-04-16T08:09:03Z")

</div>

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 😉 ).  
Weil:  
`if you think you have solved a problem with regex, then you have two problems.`

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

---

<div class="post-metadata">

### Author: ![castorp](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/c/e99b99/32.png) [@castorp](https://www.pg-forum.de/u/castorp)
#### Post date: [16. April 2021 um 11:29 UTC](https://www.pg-forum.de/t/fehler-abfangen-in-sql/12224/2 "2021-04-16T11:29:03Z")

</div>

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

---

<div class="post-metadata">

### Author: ![Gisman](https://www.pg-forum.de/user_avatar/www.pg-forum.de/gisman/32/252_2.png) [@Gisman](https://www.pg-forum.de/u/Gisman)
#### Post date: [19. April 2021 um 06:25 UTC](https://www.pg-forum.de/t/fehler-abfangen-in-sql/12224/3 "2021-04-19T06:25:14Z")

</div>

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

---

<div class="post-metadata">

### Author: ![system](https://www.pg-forum.de/uploads/default/original/1X/dc97a981dd26692d5fb52e8b8fc7c090d7b9559a.png) [@system](https://www.pg-forum.de/u/system)
#### Post date: [18. Juni 2021 um 06:26 UTC](https://www.pg-forum.de/t/fehler-abfangen-in-sql/12224/4 "2021-06-18T06:26:13Z")

</div>

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