Как удалить ведущие и конечные пробелы в поле MySQL?

У меня есть таблица с двумя полями (страны и коды ISO):

Table1

   field1 - e.g. 'Afghanistan' (without quotes)
   field2 - e.g. 'AF'(without quotes)

В некоторых строках второе поле имеет пробелы в начале и/или конце, что влияет на запросы.

Table1

   field1 - e.g. 'Afghanistan' (without quotes) 
   field2 - e.g. ' AF' (without quotes but with that space in front)

Есть ли способ (в SQL) пройти через таблицу и найти/заменить пробел в поле2?

Ответ 1

Вы ищете TRIM.

UPDATE FOO set FIELD2 = TRIM(FIELD2);

Ответ 2

Общий ответ, который я написал из ваших ответов и других ссылок, и это сработало для меня, и я написал его в комментарии:

 UPDATE FOO set FIELD2 = TRIM(Replace(Replace(Replace(FIELD2,'\t',''),'\n',''),'\r',''));

и др.

Потому что trim() не удаляет все белые пробелы, поэтому лучше заменить все белые пробелы u, а затем нарезать их.

Надеюсь, я мог бы помочь вам поделиться своим ответом:)

Ответ 3

Пожалуйста, поймите пример использования, прежде чем использовать это решение:

отделка не работает при выполнении запроса выбора

Это работает

select replace(name , ' ','') from test;

Хотя это не

select trim(name) from test;

Ответ 5

Кажется, что ни один из текущих ответов на самом деле не удалит 100% пробелов из начала и конца строки.

Как упоминалось в других публикациях, по умолчанию TRIM удаляет только пробелы, но не табуляции, рассылки форм и т.д. Комбинация TRIM задающая другие пробельные символы, может дать ограниченное улучшение, например TRIM(BOTH '\r' FROM TRIM(BOTH '\n' FROM TRIM(BOTH '\f' FROM TRIM(BOTH '\t' FROM TRIM(txt))))). Но проблема этого подхода в том, что для конкретной TRIM может быть указан только один символ, и эти символы удаляются только в начале и в конце. Таким образом, если обрезаемая строка представляет собой что-то вроде \t \t \t \t (т.е. альтернативные пробелы и символы табуляции), потребуется больше TRIM - и в общем случае это может продолжаться бесконечно.

Для облегченного решения должна быть возможность написать простую пользовательскую функцию (UDF), которая будет выполнять эту работу, просматривая символы в начале и в конце строки. Но я не собираюсь этого делать... поскольку я уже написал довольно тяжелый заменитель регулярных выражений, который также может выполнять эту работу - и может пригодиться по другим причинам, как описано в этом сообщении в блоге.

демонстрация

Rextester онлайн демо. В частности, последняя строка показывает, что другие методы дают сбой, но метод регулярного выражения завершается успешно.

SQL (код функции опущен для краткости)

SELECT reg_replace(
         reg_replace(txt,
                     '^[[:space:]]+',
                     '',
                     TRUE,
                     1,
                     0),
         '[[:space:]]+$',
         '',
         TRUE,
         1,
         0) AS 'trimmed txt'
FROM tbl;

Ответ 6

Этот оператор удалит и обновит содержимое поля вашей базы данных

Чтобы удалить пробелы в левой части значения поля

Таблица UPDATE SET field1 = LTRIM (поле1);

ех. UPDATE член SET firstName = LTRIM (firstName);

Чтобы удалить пробелы в правой части значения поля

Таблица UPDATE SETfield1 = RTRIM (поле1);

ех. UPDATE член SET firstName = RTRIM (firstName);

Ответ 7

Если вам нужно использовать trim в select query, вы также можете использовать регулярные выражения

SELECT * FROM table_name WHERE field RLIKE ' * query-string *'

возвращает строки с полем типа '         ';

Ответ 8

Мне нужно было обрезать значения в столбце первичного ключа, у которого были имена и фамилии, поэтому я не хотел обрезать все пробелы, поскольку это позволило бы удалить пространство между первым и последним именем, которое мне нужно было сохранить. То, что сработало для меня, было...

UPDATE `TABLE` SET `FIELD`= TRIM(FIELD);

или

UPDATE 'TABLE' SET 'FIELD' = RTRIM(FIELD);

или

UPDATE 'TABLE' SET 'FIELD' = LTRIM(FIELD);

Обратите внимание, что первый экземпляр FIELD находится в одинарных кавычках, а второй - вовсе не в кавычках. Я должен был сделать это так, или это дало мне синтаксическую ошибку, говоря, что это был дублирующий первичный ключ, когда у меня были оба в кавычках.

Ответ 9

вы можете использовать ltrim или rtrim для очистки пробелов для правой или левой или строки.

Ответ 10

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

select SUBSTRING_INDEX('1234 243', ' ', 1);
// returns '1234'

РЕДАКТИРОВАТЬ 2019/6/20: Да, это не хорошо. Функция возвращает часть строки, так как "когда символьное пространство появилось в первый раз". Итак, я предполагаю, что, сказав это, удалите начальные и конечные пробелы и верните первое слово:

select SUBSTRING_INDEX(TRIM(' 1234 243'), ' ', 1);