postgres中的regexp_replace只保留单个空格所需

时间:2017-08-03 11:55:18

标签: sql regex postgresql postgres-9.6

我想要的是像这样转动一个字符串;

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 个答案:

答案 0 :(得分: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)