2017-08-03 92 views
1

我想要的是將字符串變成這樣;regexp_replace在postgres中只保留單個空間

10 - 15 st. pan,cras

10 - 15 ST PANCRAS

我得到大部分的方式與

`select upper(regexp_replace('10 - 15 st. pan,cras', '[^a-zA-Z 0-9-]', '', 'g'));` 

,但我似乎無法刪除在號碼的雙重空間。我試過了,在表達式中增加了額外的空間;

`select upper(regexp_replace('10 - 15 st. pan,cras', '[^a-zA-Z 0-9-]', '', 'g'));` 

但結果沒有差異。我使用regexp_replace,因爲我發現substring語法難以遵循。在9.6字符串存儲在text

回答

1

可以增加空間摺疊到只有一個表情,就像這樣:

t=# select regexp_replace('q   q','(){1,}',' ','g'); 
regexp_replace 
---------------- 
q q 
(1 row) 

如果發現以下一個或多個連續的空間它取代單空間。

所以你的情況將是

t=# select regexp_replace(upper(regexp_replace('10 - 15 st. pan,cras', '[^a-zA-Z 0-9-]', '', 'g')),'(){1,}',' ','g'); 
    regexp_replace 
-------------------- 
10 - 15 ST PANCRAS 
(1 row) 
+0

也很不錯,它是在文檔? –

+0

是的,一個簡短的說明在https://www.postgresql.org/docs/current/static/functions-matching.html –