Answers:
如果值包含非数字字符,则可以将值转换为整数,如下所示:
SELECT CASE WHEN <column>~E'^\\d+$' THEN CAST (<column> AS INTEGER) ELSE 0 END FROM table;
CASE运算符检查<column>,如果它与整数模式匹配,则将速率转换为整数,否则返回0
您可以使用此查询
SUM(NULLIF(conversion_units, '')::numeric)
像这样天真地将任何字符串转换为整数
SELECT ''::integer
通常会导致著名的错误:
Query failed: ERROR: invalid input syntax for integer: ""
PostgreSQL没有预定义的函数来安全地将任何字符串类型转换为整数。
创建一个受PHP intval()函数启发的用户定义函数。
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;
/* 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