Кажется, что ни один из текущих ответов на самом деле не удалит 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
s - и в общем случае это может продолжаться бесконечно.
Для облегченного решения должна быть возможность написать простую пользовательскую функцию (UDF), которая будет выполнять эту работу путем циклического перебора символов в начале и конце строки. Но я не собираюсь этого делать ... поскольку я уже написал более тяжелый заменитель регулярных выражений , который также может выполнять эту работу - и может пригодиться по другим причинам, как описано в это сообщение в блоге .
Демо
Rextester online demo . В частности, последняя строка показывает, что другие методы не работают, но метод регулярного выражения завершается успешно.
SQL (код функции для краткости опущен)
SELECT reg_replace(
reg_replace(txt,
'^[[:space:]]+',
'',
TRUE,
1,
0),
'[[:space:]]+$',
'',
TRUE,
1,
0) AS `trimmed txt`
FROM tbl;