sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo convierto una cadena en entero y tengo 0 en caso de error en la conversión con PostgreSQL?

Yo mismo estaba luchando con un problema similar, pero no quería los gastos generales de una función. Se me ocurrió la siguiente consulta:

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

Postgres abrevia sus condicionales, por lo que no debería obtener números que no sean enteros golpeando su elenco de ::enteros. También maneja valores NULL (no coincidirán con la expresión regular).

Si desea ceros en lugar de no seleccionar, entonces una instrucción CASE debería funcionar:

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