1
我需要如下分割字符串,當我嘗試用split_part沒有運氣得到直到字符串結束之後第一空間
select split_part('8 HAMPSHIRE RD',' ',2)
預期輸出:HAMPSHIRE RD
我需要如下分割字符串,當我嘗試用split_part沒有運氣得到直到字符串結束之後第一空間
select split_part('8 HAMPSHIRE RD',' ',2)
預期輸出:HAMPSHIRE RD
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', '');
沒有正則表達式的更便宜的解決方案:
SELECT substring (
'8 HAMPSHIRE RD'
FROM position(' ' IN '8 HAMPSHIRE RD') + 1
);
謝謝,但你能解釋一下'。*?\ s'是什麼意思嗎?是否意味着空間和。意味着從位置1開始*和?意味着直到字符串末尾 –
表達式表示任何字符串,直到包含此空格的第一個空格。 '?'符號強制正則表達式是懶惰的(即找到第一個空格)。 – klin
我將此問題標記爲已回答,但是僅在數字後面檢查空格有幫助嗎?因爲上面的表達式給予我「BOX 203」,當我將其應用於「PO BOX 203」這樣的地址時,我希望結果爲「PO BOX 203」。對不起,我應該在 –