Подтвердить что ты не робот

PostgreSQL regexp_replace() для сохранения только одного пробела

Мне нужно очистить строковый столбец с пробелами и вкладками, включенными внутри, в начале или в конце строк (это беспорядок!). Я хочу сохранить только одно пробел между каждым словом. Скажем, у нас есть следующая строка, которая включает в себя все возможные ситуации:

mystring = '  one two    three      four    '
  • 2 пробела перед "одним"
  • 1 пробел между "одним" и "вторым"
  • 4 пробелов между "двумя" и "тремя"
  • 2 вкладки после "три"
  • 1 вкладка после 'four'

Вот как я это делаю:

  • Я удаляю ведущие и конечные пробелы
  • Я удаляю вкладки, ведущие и завершающие.
  • Я заменяю как "пробелы, повторяемые по крайней мере два", так и вкладки единственным пробелом

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 '

Любая идея сделать это более простым способом и решить эту последнюю проблему?

Большое спасибо!

4b9b3361