Ответ 1
Вы ищете TRIM.
UPDATE FOO set FIELD2 = TRIM(FIELD2);
У меня есть таблица с двумя полями (страны и коды 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?
Вы ищете TRIM.
UPDATE FOO set FIELD2 = TRIM(FIELD2);
Общий ответ, который я написал из ваших ответов и других ссылок, и это сработало для меня, и я написал его в комментарии:
UPDATE FOO set FIELD2 = TRIM(Replace(Replace(Replace(FIELD2,'\t',''),'\n',''),'\r',''));
и др.
Потому что trim() не удаляет все белые пробелы, поэтому лучше заменить все белые пробелы u, а затем нарезать их.
Надеюсь, я мог бы помочь вам поделиться своим ответом:)
Пожалуйста, поймите пример использования, прежде чем использовать это решение:
отделка не работает при выполнении запроса выбора
Это работает
select replace(name , ' ','') from test;
Хотя это не
select trim(name) from test;
Чтобы быть понятным, TRIM по умолчанию удаляет пробелы (не все пробелы). Вот документ: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim
Кажется, что ни один из текущих ответов на самом деле не удалит 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;
Этот оператор удалит и обновит содержимое поля вашей базы данных
Чтобы удалить пробелы в левой части значения поля
Таблица UPDATE SET field1 = LTRIM (поле1);
ех. UPDATE член SET firstName = LTRIM (firstName);
Чтобы удалить пробелы в правой части значения поля
Таблица UPDATE SETfield1 = RTRIM (поле1);
ех. UPDATE член SET firstName = RTRIM (firstName);
Если вам нужно использовать trim в select query, вы также можете использовать регулярные выражения
SELECT * FROM table_name WHERE field RLIKE ' * query-string *'
возвращает строки с полем типа ' ';
Мне нужно было обрезать значения в столбце первичного ключа, у которого были имена и фамилии, поэтому я не хотел обрезать все пробелы, поскольку это позволило бы удалить пространство между первым и последним именем, которое мне нужно было сохранить. То, что сработало для меня, было...
UPDATE `TABLE` SET `FIELD`= TRIM(FIELD);
или
UPDATE 'TABLE' SET 'FIELD' = RTRIM(FIELD);
или
UPDATE 'TABLE' SET 'FIELD' = LTRIM(FIELD);
Обратите внимание, что первый экземпляр FIELD находится в одинарных кавычках, а второй - вовсе не в кавычках. Я должен был сделать это так, или это дало мне синтаксическую ошибку, говоря, что это был дублирующий первичный ключ, когда у меня были оба в кавычках.
вы можете использовать ltrim или rtrim для очистки пробелов для правой или левой или строки.
Я знаю, что это уже принято, но для таких как я, которые ищут "удалить ВСЕ пробелы" (не только в начале и в конце строки):
select SUBSTRING_INDEX('1234 243', ' ', 1);
// returns '1234'
РЕДАКТИРОВАТЬ 2019/6/20: Да, это не хорошо. Функция возвращает часть строки, так как "когда символьное пространство появилось в первый раз". Итак, я предполагаю, что, сказав это, удалите начальные и конечные пробелы и верните первое слово:
select SUBSTRING_INDEX(TRIM(' 1234 243'), ' ', 1);