Masalah umum
Ketikkan casting string apa pun secara naif menjadi integer seperti itu
SELECT ''::integer
Seringkali hasil dari kesalahan terkenal:
Query failed: ERROR: invalid input syntax for integer: ""
Masalah
PostgreSQL tidak memiliki fungsi yang telah ditentukan sebelumnya untuk aman mengetikkan string apa pun ke dalam integer.
Larutan
Buat fungsi yang ditentukan pengguna yang terinspirasi oleh fungsi intval () 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;
Pemakaian
/* 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