我需要清理一个包含空格和制表符的字符串列,无论是在字符串的开头还是结尾(真是一团糟!).我想在每个单词之间只保留一个空格.假设我们有以下字符串,其中包括所有可能的情况:

mystring = '  one two    three      four    '
  • "一"前有2个空格
  • 1"1"和"2"之间的空白
  • "2"和"3"之间有4个空格
  • "三"之后有两个标签
  • "四"之后的1个标签

我是这样做的:

  1. 我删除前导空格和尾随空格
  2. 我删除前导和尾随标签
  3. 我用唯一的空格替换"至少重复两次的空格"和制表符

WITH

  t1 AS (SELECT'  one two    three      four    '::TEXT AS mystring),

  t2 AS (SELECT TRIM(both ' ' from mystring) AS mystring FROM t1),

  t3 AS (SELECT TRIM(both '\t' from mystring) AS mystring FROM t2)

  SELECT regexp_replace(mystring, '(( ){2,}|\t+)', ' ', 'g') FROM t3 ;

我最终得到了下面的字符串,看起来不错,但我仍然有一个尾随空格...

'one two three four '

有没有想过用更简单的方式来解决最后一个问题?

非常感谢!

推荐答案

SELECT trim(regexp_replace(col_name, '\s+', ' ', 'g')) as col_name FROM table_name;

或在更新的情况下:

UPDATE table_name SET col_name = trim(regexp_replace(col_name, '\s+', ' ', 'g'));

Postgresql相关问答推荐

PostgreSQL中btree_gist索引涉及integer和tstzrange属性查询计划的问题

转换失败:(—122.763091,49.04676)转换为地理(位置)""

如何将 jackc/pgx 与连接池、上下文、准备好的语句等一起使用

正在加载 pgAdmin 4 v7.4...同时打开 pgAdmin

在 PostgreSQL 中提高 GROUP BY ... HAVING COUNT(...) > 1 的性能

如何在 PostgreSQL 的回归测试中测试 TYPE 发送和接收函数

当我写 SELECT ~1;在 Postgresql 上它给了我 -2 结果.这是什么原因?它一直持续〜4和-5等

如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?

postgres 的密码

如何让 Flask SQLAlchemy 重用数据库连接?

PostgreSQL 中的 DATEADD 等效项

如何在 Postgres 中的列上删除唯一约束?

带有初始数据的 docker postgres 不会在提交中持久化

在psql中,为什么有些命令没有效果?

是否可以在 Postgres 中存储一个 1 字节的数字?

PostgreSQL:如何安装 plpythonu 扩展

如何判断每个组中是否存在值

错误:表tablename上的更新或删除违反外键约束

Entity Framework Core jsonb 列类型

性能调优:为布尔列创建索引