从字符串字段中提取数字,包括十进制(Postgres 9.5)

时间:2017-07-10 20:30:16

标签: regex postgresql

假设我有一个字段:

product_strength
10MG/ML
0.25MG
25MG
0.125MG

如何仅提取“数字”部分然后转换为数字?我可以做到这一点:regexp_replace(product_strength, '(\D|!\.)','','g')::numeric AS result_numeric

但问题是它实际上并没有考虑小数。换句话说,这会返回

product_strength result_numeric
10MG/ML             10
0.25MG              25
25MG                25
0.125MG             125

但我想返回

product_strength result_numeric
10MG/ML             10
0.25MG              0.25
25MG                25
0.125MG             0.125

2 个答案:

答案 0 :(得分:3)

我会使用regexp_matches:

select (regexp_matches(product_strength, '[0-9]+\.?[0-9]*'))[1]::numeric
from the_table

regexp_matches()返回所有匹配字符串的数组,这就是需要[1]的原因。

答案 1 :(得分:2)

尝试this正则表达式匹配数字;

\d+\.?\d*