PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment convertir une chaîne en entier et avoir 0 en cas d'erreur de conversion avec PostgreSQL ?

Je luttais moi-même avec un problème similaire, mais je ne voulais pas la surcharge d'une fonction. J'ai trouvé la requête suivante :

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

Postgres raccourcit ses conditions, vous ne devriez donc pas avoir de non-entiers frappant votre ::integer cast. Il gère également les valeurs NULL (elles ne correspondent pas à l'expression régulière).

Si vous voulez des zéros au lieu de ne pas sélectionner, alors une instruction CASE devrait fonctionner :

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