2017-07-18 82 views

回答

0

使用regexp_replace()

select regexp_replace('8 HAMPSHIRE RD', '.*?\s', ''); 

regexp_replace 
---------------- 
HAMPSHIRE RD 
(1 row) 

使用字符串操作函數的替代解決方案:

with my_table(str) as (
    values ('8 HAMPSHIRE RD') 
) 
select right(str, -strpos(str, ' ')) 
from my_table; 

如果你想跳過第一個字,如果它僅包含數字,你應該使用\d(數字),而不是.(任何字符):

select regexp_replace('8 HAMPSHIRE RD', '\d*?\s', ''); 
+0

謝謝,但你能解釋一下'。*?\ s'是什麼意思嗎?是否意味着空間和。意味着從位置1開始*和?意味着直到字符串末尾 –

+0

表達式表示任何字符串,直到包含此空格的第一個空格。 '?'符號強制正則表達式是懶惰的(即找到第一個空格)。 – klin

+0

我將此問題標記爲已回答,但是僅在數字後面檢查空格有幫助嗎?因爲上面的表達式給予我「BOX 203」,當我將其應用於「PO BOX 203」這樣的地址時,我希望結果爲「PO BOX 203」。對不起,我應該在 –

1

沒有正則表達式的更便宜的解決方案:

SELECT substring (
      '8 HAMPSHIRE RD' 
      FROM position(' ' IN '8 HAMPSHIRE RD') + 1 
     ); 
相關問題