Ist ein String numerisch?
Es gibt in PostgreSQL keine eingebaute Funktion, mit der man prüfen kann, ob ein String einen gültigen Zahlenwert darstellt. In anderen Datenbanken gibt es dafür eingebaute Funktionen, die häufig IS_NUMERIC
oder ISNUMERIC
heißen.
Beispiele:
- ein String '1' ist numerisch
- ein String 'a' ist nicht numerisch
Man kann dafür recht einfach eine eigene Funktion anlegen:
CREATE OR REPLACE FUNCTION public.isnumeric(text)
RETURNS BOOLEAN
LANGUAGE plpgsql IMMUTABLE STRICT COST 100
AS $$
DECLARE
x NUMERIC;
BEGIN
x := $1::NUMERIC;
RETURN true;
EXCEPTION WHEN others THEN
RETURN false;
END;
$$
;
Diese Funktion übernimmt als Parameter einen text
und versucht diesen bei der Zuweisung zu einer numerischen Variable entsprechend umzuwandeln (Zeile 8). Wenn das fehlerfrei funktioniert, gibt die Funktion true
zurück - es handelt sich bei dem String also um einen gültigen Zahlenwert. Falls nicht, tritt eine Exception auf und die Funktion gibt false
zurück.
Verwendung
SELECT isnumeric('1'); --> true
SELECT isnumeric('a'); --> false