sql - postgres 中的 regexp_replace 仅保留单个空格

标签 sql regex postgresql postgres-9.6

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

10 - 15 日平底锅,cras

10 - 15 圣潘克拉斯

我得到了大部分的方法

 `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

最佳答案

您可以只对一个表达式添加空格折叠,如下所示:

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)

关于sql - postgres 中的 regexp_replace 仅保留单个空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45483469/

相关文章:

php - 如何计算两个时间点之间的小时数?

sql - 在 Postgresql 中选择以字符串形式存储的分数作为十进制值

java - ANTLR 正则表达式中的范围量词语法

mysql - 正则表达式 - rlike 有 1 和没有 10

postgresql - 属性错误 : 'ParseResult' object has no attribute 'drivername'

mysql - 如何在不使用辅助表的情况下连接两个在查询中应该只有一个的表? (使用两列进行左连接即可)

c# - ConfigurationSettings 与 Properties.Settings

mysql - 正则表达式 - 搜索单词的开头

postgresql - 从局域网访问 PostgreSQL 服务器

ruby-on-rails - 使用 ActiveRecord 在 PostgreSQL 中匹配数组值