假设我有一个字段:
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
答案 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*