使用 Postgresql 将 String 转换为 Double
Cast String to Double using Postgresql
如何将包含双精度值的字符串转换为数值,同时保持精度。如果字符串不是双精度,则转换为零
如果输入字符串有 "numeric content",则此查询使用正则表达式匹配 return 双精度数,也只有数字或小数以点作为分隔符,如 1.0
、18789.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
如何将包含双精度值的字符串转换为数值,同时保持精度。如果字符串不是双精度,则转换为零
如果输入字符串有 "numeric content",则此查询使用正则表达式匹配 return 双精度数,也只有数字或小数以点作为分隔符,如 1.0
、18789.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