使用 Postgresql 将 String 转换为 Double

Cast String to Double using Postgresql

如何将包含双精度值的字符串转换为数值,同时保持精度。如果字符串不是双精度,则转换为零

如果输入字符串有 "numeric content",则此查询使用正则表达式匹配 return 双精度数,也只有数字或小数以点作为分隔符,如 1.018789.903。 Returns 如果输入字符串包含非数字字符,如 10hghj,则为 0。字符串前面允许有减号(负双):

-- returns 1.2143
WITH subquery AS (SELECT '1.2143'::text as value) 
   SELECT 
   CASE WHEN value ~ '^(-)?[0-9]+\.?([0-9]+)?$'
        THEN value::double precision 
        ELSE 0 
   END FROM subquery;

-- returns 0 because input is a contains not digits characters 
-- (the regex expression is the same) 
WITH subquery AS (SELECT '1214gh'::text as value) 
   SELECT 
   CASE WHEN value ~ '^(-)?[0-9]+\.?([0-9]+)?$'
        THEN value::double precision 
        ELSE 0 
   END FROM subquery;

解释:

~ 是 PostgreSql 中的正则表达式匹配运算符。更多信息在这里:http://www.postgresql.org/docs/9.4/static/functions-matching.html#FUNCTIONS-POSIX-TABLE

CASE WHEN THEN ELSE 表达式允许您根据一个或多个条件更改 returned 值。在 WHEN 部分是允许的所有语句,其中 return 一个布尔值。更多信息:http://www.postgresql.org/docs/9.4/static/functions-conditional.html