Problema común
Tipo ingenuamente lanzando cualquier cadena en un entero como ese
SELECT ''::integer
A menudo resulta en el famoso error:
Query failed: ERROR: invalid input syntax for integer: ""
Problema
PostgreSQL no tiene una función predefinida para convertir de forma segura cualquier cadena en un número entero.
Solución
Cree una función definida por el usuario inspirada en la función intval () de PHP .
CREATE FUNCTION intval(character varying) RETURNS integer AS $$
SELECT
CASE
WHEN length(btrim(regexp_replace($1, '[^0-9]', '','g')))>0 THEN btrim(regexp_replace($1, '[^0-9]', '','g'))::integer
ELSE 0
END AS intval;
$$
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
Uso
/* Example 1 */
SELECT intval('9000');
-- output: 9000
/* Example 2 */
SELECT intval('9gag');
-- output: 9
/* Example 3 */
SELECT intval('the quick brown fox jumps over the lazy dog');
-- output: 0