仅返回列中的数值 - Postgresql

时间:2014-02-21 22:42:25

标签: sql postgresql pattern-matching

我在name表格的contacts列中有几个与此类似的值:

test 3100509 DEMO NPS

我想只返回name中每个值的数字部分。

我试过了:

select substring(name FROM '^[0-9]+|.*') from contacts

但那不行。

有关如何从返回值中删除所有非数字字符的想法吗?

3 个答案:

答案 0 :(得分:13)

试试这个:

select substring(name FROM '[0-9]+') from contacts

答案 1 :(得分:11)

select regexp_replace(name , '[^0-9]*', '', 'g') from contacts;

这应该这样做。即使名称中有多个数字序列,它也会起作用。

示例:

create table contacts(id int, name varchar(200));

insert into contacts(id, name) values(1, 'abc 123 cde 555 mmm 999');

select regexp_replace(name , '[^0-9]*', '', 'g') from contacts;

答案 2 :(得分:2)

如果要提取带小数点的数值而不是使用此

select NULLIF(regexp_replace(name, '[^0-9.]*','','g'), '')::numeric from contacts