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

Vin*_*ent 1 regex postgresql

假设我有一个字段:

product_strength
10MG/ML
0.25MG
25MG
0.125MG
Run Code Online (Sandbox Code Playgroud)

如何仅提取“数字”部分然后转换为数字?我可以做到这一点: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
Run Code Online (Sandbox Code Playgroud)

但我想回来

product_strength result_numeric
10MG/ML             10
0.25MG              0.25
25MG                25
0.125MG             0.125
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

我会为此使用 regexp_matches:

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

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