/
Вопросы и ответы
/
SQL
/

Удалить пробелы postgresql

Удалить пробелы postgresql

3 года назад

Nikolai Gagarinov

Ответы

0

Для удаления пробелов из текстового поля в PostgreSQL, вы можете использовать функцию REPLACE в комбинации с функцией TRIM. Например, предположим, у вас есть таблица users с полем full_name, содержащим пробелы в начале, середине и в конце:

1
2
UPDATE users
SET full_name = TRIM(REPLACE(full_name, ' ', ''))

Этот запрос удалит все пробелы из поля full_name в таблице users. Первая функция REPLACE заменяет все пробелы на пустую строку, а вторая функция TRIM удаляет пробелы из начала и конца строки. Таким образом, вы получите значение поля full_name без пробелов.

Не забудьте сделать резервную копию данных перед выполнением запроса UPDATE, чтобы избежать потери информации.

3 года назад

Elena Gromova

0

Функция зависит от того, какие пробелы нужно убрать.

ЗадачаФункция
по краям строкиtrim(s)
только слеваltrim(s)
только справаrtrim(s)
все пробелыreplace(s, ' ', '')
пробелы, табы и переводы строкregexp_replace(s, '\s+', '', 'g')
несколько пробелов подряд → одинregexp_replace(s, '\s+', ' ', 'g')

Пробелы по краям

1
2
3
SELECT trim('   Иван Петров   ');   -- 'Иван Петров'
SELECT ltrim('   Иван');            -- 'Иван'
SELECT rtrim('Иван   ');            -- 'Иван'

trim убирает только пробелы. Табы и переводы строк останутся. Чтобы убрать и их, перечислите символы вторым аргументом:

1
SELECT btrim(E'\t Иван \n', E' \t\n\r');  -- 'Иван'

Все пробелы внутри строки

1
SELECT replace('8 800 100 22 47', ' ', '');  -- '88001002247'

Любые пробельные символы

1
SELECT regexp_replace(E'Иван\t Петров\n', '\s+', '', 'g');  -- 'ИванПетров'

Флаг 'g' заменяет все совпадения. Без него заменится только первое.

Лишние пробелы между словами

1
SELECT trim(regexp_replace('Иван    Петров  ', '\s+', ' ', 'g'));  -- 'Иван Петров'

Неразрывный пробел

Если строку скопировали из Word или с сайта, в ней может быть неразрывный пробел. trim и \s его не трогают. Его убирают по коду символа:

1
SELECT replace(phone, chr(160), '') FROM users;

Обновить данные в таблице

Сначала проверьте результат через SELECT:

1
2
3
4
SELECT full_name, trim(regexp_replace(full_name, '\s+', ' ', 'g')) AS cleaned
FROM users
WHERE full_name <> trim(regexp_replace(full_name, '\s+', ' ', 'g'))
LIMIT 20;

Потом обновите только изменившиеся строки:

1
2
3
UPDATE users
SET full_name = trim(regexp_replace(full_name, '\s+', ' ', 'g'))
WHERE full_name <> trim(regexp_replace(full_name, '\s+', ' ', 'g'));

Условие WHERE не даёт переписывать строки, где менять нечего.

Пробелы в CHAR

У типа char(n) PostgreSQL сам дополняет строку пробелами до длины n. Если хвостовые пробелы мешают, храните данные в varchar или text.

Функции для строк, SELECT и UPDATE разбирают в бесплатном курсе «Основы SQL».

11 часов назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845