2014-01-29 32 views
1

我有一個查詢和我使用split_part擺脫某些位置的值:如何從右側搶在PostgreSQL中

split_part(fieldname,'{',12) 

結果將是這樣的:

200;1;235} 
200;1;237} 
200;1;216} 

我目標是在第二個;之後抓取任何東西,如(235,237,216)作爲;之後的字符數不是靜態的

意味着某個時間它會出現1,2,4或甚至5位數字,並且字符數會根據值而變化。

請提出任何方式來做到這一點?

+0

相關的您的其他問題,http://stackoverflow.com/questions/21438549 /分裂數據爲基礎的一些字符在Postgres(只是讓其他讀者知道)。這個數據模型很糟糕,請使用整數數組代替。 –

回答

0

嘗試

split_part(trim('}' from split_part(fieldname,'{',12)), ';', 3) 

請看一看這個演示:http://sqlfiddle.com/#!15/978bd/5

+0

感謝您的幫助...它的工作:D – hi4ppl

+0

@ hi4ppl如果這個答案確實解決了您的問題,那麼您應該考慮[接受](http://meta.stackexchange.com/a/5235)它。 –

2

試試這個: regexp_matches(split_part(fieldname,'{',12), '\d+;\d+;(\d+)}')

+0

嗨感謝重播,在主數據庫中運行之前我測試它是這樣的: select regexp_matches('200; 1; 235}','{\ d +; \ d +;(\ d +)}') 返回nothign – hi4ppl

+0

我假設整個「fieldname」,所以你會匹配'{200; 1; 235}',甚至'abc {200; 1; 235} xyz' – albe

+0

我沒有得到split_part的東西。我相應地編輯了它。 – albe