PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço para converter uma string para inteiro e ter 0 em caso de erro na conversão com o PostgreSQL?


Eu estava apenas lutando com um problema semelhante, mas não queria a sobrecarga de uma função. Cheguei à seguinte consulta:
SELECT myfield::integer FROM mytable WHERE myfield ~ E'^\\d+$';

Postgres atalhos seus condicionais, então você não deve obter nenhum número não inteiro atingindo seu ::integer cast. Ele também lida com valores NULL (eles não corresponderão ao regexp).

Se você deseja zeros em vez de não selecionar, uma instrução CASE deve funcionar:
SELECT CASE WHEN myfield~E'^\\d+$' THEN myfield::integer ELSE 0 END FROM mytable;