我在name
表格的contacts
列中有几个与此类似的值:
test 3100509 DEMO NPS
我想只返回name
中每个值的数字部分。
我试过了:
select substring(name FROM '^[0-9]+|.*') from contacts
但那不行。
有关如何从返回值中删除所有非数字字符的想法吗?
答案 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