2012-01-19 8 views
0

私は別の列に抽出するID番号の混合データを含むフィールドを持っています。抽出したい列には、 'lastname、firstname-ID'という形式に一致するレコードがいくつかあります。私は、 'ID'の部分だけを取り除きたいだけで、 ' - 'とそれに続く数字を持つ列から削除するだけです。PostgreSQLのvarcharからID番号を抽出する

だから私がやろうとしていたものた...

update data.xml_customerqueryrs 
set new_id = regexp_replace(name, '[a-z]A-Z]', '') 
where name like '%-%'; 

私は修正する必要があることのマイナーなものがあるけど、私は、パターンマッチングのためのPostgreSQLのドキュメントは本当にないとわかりません数字だけを検索することをカバーする良い仕事をしてください。

+0

当たり前では... 更新data.xml_customerqueryrs セットNEW_ID =ストリング(名前、strpos(名前、 ' - ')、長さ(名) ) 「% - %」のような名前。 – MISMajorDeveloperAnyways

答えて

1

それとも、も行うことができます。

new_id = substr(name, strpos(name, '-'), length(name)) 

参考:Strings

+0

結果に「 - 」を含めます。また、古いバージョンのマニュアルにリンクしないようにしてください。なぜなら、Googleはその結果をまっすぐに受け取ることができないからです。それを私が直した。 [this](http://meta.stackexchange.com/questions/108714/best-way-to-reference-the-postgresql-manual)を検討してください。 –

3

をあなたが実際にonly want to strip the 'ID' part場合:

new_id = regexp_replace(name, '-.*?$', '') 

それとも、あなたは、実際には、エキスにしたい場合ID部:

new_id = substring(name, '-(.*?)$') 

私は*? quantifierを使用します。最後の部分のみが抽出されます。名前には-という名前が入ります。同様に:

Skeet-Gravell,John-1234 

String functions現在マニュアル

関連する問題