PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich einen String in eine ganze Zahl umwandeln und im Falle eines Fehlers bei der Umwandlung mit PostgreSQL 0 haben?

Ich habe gerade selbst mit einem ähnlichen Problem gekämpft, wollte aber nicht den Overhead einer Funktion. Ich kam mit der folgenden Abfrage:

SELECT myfield::integer FROM mytable WHERE myfield ~ E'^\\d+$';

Postgres verkürzt seine Bedingungen, sodass Sie keine Nicht-Ganzzahlen erhalten sollten, die Ihren ::integer Cast treffen. Es verarbeitet auch NULL-Werte (sie passen nicht zum regulären Ausdruck).

Wenn Sie Nullen wollen, anstatt nichts auszuwählen, dann sollte eine CASE-Anweisung funktionieren:

SELECT CASE WHEN myfield~E'^\\d+$' THEN myfield::integer ELSE 0 END FROM mytable;