2014-02-21 11 views
6

나는 이것과 유사한 contacts 테이블에서 내 name 열에서 여러 값을 가지고PostgreSQL을

test 3100509 DEMO NPS

내가 name에서 각 값의 숫자 부분을 반환하려면 .

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

하지만 그것을하지 않습니다

나는이 시도.

반환 값에서 숫자가 아닌 모든 문자를 제거하는 방법에 대한 의견이 있으십니까?

답변

10

이 시도 :

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

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; 
+0

+1 그리고 어쩌면있는 [정규 표현식 클래스 속기 (HTTP를 사용하는 것보다 소수점 숫자 값을 추출 할 경우 : // www.postgresql.org/docs/current/interactive/functions-matching.html#POSIX-CLASS-SHORTHAND-ESCAPES-TABLE) :'SELECT regexp_replace (name, '\ D', '', 'g') 연락처로부터; ' –

0

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