web-dev-qa-db-ja.com

列から数値のみを返す-Postgresql

nameテーブル内のcontacts列に次のような値がいくつかあります。

_test 3100509 DEMO NPS_

nameから各値の数値のみを返したい。

私はこれを試しました:

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

しかし、それはそれをしません。

戻り値から数値ではないすべての文字を取り除く方法について何か考えはありますか?

12
Luigi

これを試して :

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

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;
13
peter.petrov

これを使用するよりも小数点付きの数値を抽出したい場合

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