Skip to main content

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