В этом учебном пособии вы узнаете, как использовать MySQL функцию TRIM с синтаксисом и примерами.
Описание
MySQL функция TRIM удаляет все указанные символы либо из начала, либо из конца строки.
Синтаксис
Синтаксис MySQL функции TRIM:
Параметры или аргументы
LEADING — необязательный. Удаляет trim_character из начала строки.
TRAILING — необязательный. Удаляет trim_character из конца строки.
BOTH — необязательный. Удаляет trim_character из начала и конца строки.
trim_character — необязательный. Символ, который будет удален из строки. Если этот параметр опущен, он удаляет символы пробела из строки.
string — строка для обрезки.
Примечание
Если не указать значение для первого параметра ( LEADING , TRAILING , BOTH ), функция TRIM по умолчанию примет BOTH и удалит trim_character как из начала, так и из конца строки.
Если не указывать trim_character , то функция TRIM, удалит символы пробела.
Применение
Функция TRIM может использоваться в следующих версиях MySQL:
MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23
Пример
Рассмотрим примеры MySQL функции TRIM, чтобы понять, как использовать функцию TRIM в MySQL. Например:
Не работает ли функция TRIM MySQL без обрезки строк или возврата каретки?
Из моих экспериментов, похоже, это не так. Если это действительно так, каков наилучший способ удаления разрывов строк? В настоящее время я экспериментирую с параметрами, которые TRIM принимает для удаления символа, начиная с обрезки \n и \r .
ОТВЕТЫ
Ответ 1
Trim() в MySQL удаляет только пробелы.
Я не верю, что есть встроенный способ удаления всех типов конечных и ведущих пробелов в MySQL, если вы не используете повторно Trim() .
Я предлагаю вам использовать другой язык для очистки ваших текущих данных и просто убедитесь, что ваши входы теперь дезинфицированы.
Ответ 2
Мои разрывы строк были в середине строки, и я не контролировал исходные данные. Для меня работала следующая команда mysql:
Ответ 3
Да, Trim() будет работать в MySQL. У вас есть два варианта.
Если это не сработает, попробуйте ‘\r’ , если это не сработает, попробуйте ‘\n\r’ .
2) замените плохие данные в вашей таблице на обновление.
Я рекомендую сначала выбрать, какой у вас разрыв строки (\ r или\n).
Ответ 4
Стандартная функция MySQL trim не похожа на функции отделки на любых других языках, которые я знаю, поскольку она удаляет только точные совпадения строк, а не любые символы в строке. Эта хранимая функция больше похожа на обычную обрезку, которую вы найдете в PHP, или на python и т.д.
Затем вы сможете:
и он должен удалить все символы новой строки, вкладки и пробелы.
Ответ 5
select trim(both ‘\r\n’ from FIELDNAME) from TABLE; должен работать, если select trim(both ‘\n’ from FIELDNAME) from TABLE; не работает.
Ответ 6
Ответ 7
Я мог заставить его работать, создав char ;
Ответ 8
Ответы выше, когда они объединены, работают. Полный пример замены строк в начале и в конце поля выглядит следующим образом:
Ответ 9
Я столкнулся с одной и той же проблемой с одним из полей. Идеального решения нет. В моем случае мне повезло, что длина поля должна была быть 6. Поэтому я использовал запрос типа
Вам просто нужно выбрать лучший вариант, основанный на ваших потребностях. Замена ‘\n’ и ‘\ r\n’ не сработала для меня и просто закончилась тратой времени.
Ответ 10
REPLACE(FIELD,’\r\n’,’ ‘) отлично работает в базе данных MySql 5.1
Источник
Trim не работает с массивом из MySQL извлекается строка
То, что я пытаюсь сделать, это взять блок html, убрать все html тэги и поместить каждую строку текста в массив PHP.
Я просто пробую это с одним блоком для проверки (следовательно, WHERE в моем запросе MySQL.
Часть HTML для ID 2409 выглядит следующим образом:
И вот мой PHP-скрипт, предназначенный для анализа этого
Это дает такой результат
Это нормально, но теперь у меня проблема с удалением пробелов до и после строк в массиве.
Давайте рассмотрим пример для узла 8 в массиве
Теперь то, что я пытаюсь сделать, это явно обрезать каждый элемент массива, но для тестирования я просто работаю с этой одной переменной $arrayvalue .
Моя проблема в том, что trim() не работает с этой извлеченной переменной MySQL. Значение добавления trim($arrayvalue); не имеет никакого эффекта и отражается так же, как указано выше.
Я знаю, что это связано с тем, что я получаю массив с помощью моего запроса, потому что, если я просто протестирую эту переменную в своем собственном php-скрипте
Он работает нормально, и вывод эха просто ad Quisque Modeste с желаемым без пробелов до или после строки.
Почему trim() не работает в моем цикле while ? Какой трюк урезать начальные и конечные пробелы из элементов?
Изменить: Вот мой полный цикл в соответствии с просьбой. Это немного отличается от приведенного выше примера (я делал много модификаций, пытаясь решить это сам, поэтому он постоянно меняется), но вот что я сейчас имею в полном объеме:
В соответствии с запросом, вот результаты var_export($row[‘post_content’]);
Размещено решение ниже. Не собираюсь принимать мой собственный ответ.
Если кто-нибудь, знакомый с регулярным выражением, может помочь объяснить беду, стоящую за всем этим, и почему эта формула регулярного выражения: /[\s]+/mu или, скорее, $clean_htmlarray = preg_replace(‘/[\s]+/mu’, ‘ ‘, $htmlarray); исправила эту проблему, я с радостью приму это как правильный ответ и объяснение.
3 ответа
Вот ваше запрошенное объяснение шаблона регулярных выражений, которое решило вашу проблему:
/[\s]+/ говорит: «ищите один или несколько символов пробела (это включает в себя: », ‘\ r’, ‘\ n’, ‘\ t’, ‘\ f’, ‘\ v’). Модификатор / флаг multi-line не нужен, потому что вы не используете якоря ( ^ $ ) в вашем шаблоне. Модификатор / флаг unicode является абсолютно критическим в вашем случае, потому что ваша строка HTML-текста содержит много маленьких дьяволов, называемых .
«NO-BREAK SPACE» и представляет собой комбинацию символов Юникода 194 и 160 , представленных как \x <00a0>. См. Их выделение здесь.
Без флага u символы NO-BREAK SPACE остаются, и для их удаления потребуется дополнительная фильтрация.
В то время как вы в конечном итоге получили свой код на правильный вывод. Я рад создать более простой одношаговый шаблон, который поможет вам быстрее, просто используя preg_split ( ).
Этот новый шаблон разбиения по-прежнему ищет ваши теги, но он более эффективен, потому что между и > я просто прошу сопоставить все символы, которые не » > «, используя [^>]+ . Это намного проще для движка по сравнению с запросом совпадения из длинного списка символов, который представляет . .
Кроме того, я включил сопоставление для ваших расширенных символов Юникода. \s* будет соответствовать нулю или большему количеству пробелов перед AND после каждого тега.
Наконец, я должен объяснить дополнительные параметры preg_split() . null говорит: «найти неограниченное количество соответствий» — это поведение по умолчанию, но я должен использовать null или -1 в качестве значения, чтобы сохранить его место, чтобы убедиться, что используется последний параметр , PREG_SPLIT_NO_EMPTY избавляет вас от необходимости делать дополнительный шаг использования array_filter() позже. Он пропускает все пустые элементы, сгенерированные из разбиения, так что вы получите только хорошие вещи.
Я надеюсь, что вы нашли это полезным / образовательным. Удачи с вашим проектом.
Отделка не работает на месте. Вы хотите это:
Это действительно так. Trim возвращает обрезанную строку: она не изменяет переменную на месте.
Я нашел решение.
Не совсем уверен, как это работает .. Я совершенно не знаком с регулярным выражением.
Но решение, которое я нашел (а может, кто-то может это объяснить?) Было
Весь скрипт (исключая материал MySQL), который работал
Полностью урезанный массив.
Это также работает в моем цикле while для всех строк, т.е.
В этом случае я получаю все 50 рядов с полностью обрезанными строками.
Итак, наконец . это было проблемой, чтобы выяснить!
Хотелось бы, чтобы я понял это больше. Я действительно не чувствую, что заслуживаю подтверждения в качестве ответа на этот вопрос, поскольку все, что я действительно делал, это пробовал кучу разных вещей, и в конце концов это сработало.
Если кто-то захочет присоединиться и объяснить, почему $clean_htmlarray = preg_replace(‘/[\s]+/mu’, ‘ ‘, $htmlarray); , а точнее /[\s]+/mu был тем, что мне было нужно в этом случае, я с радостью приму ответ им 🙂
А пока просто рад, что он работает правильно. Спасибо всем за помощь и вклад с этим!
Источник
Mysql function trim doesn’t work [closed]
Want to improve this question? Update the question so it’s on-topic for Stack Overflow.
Closed 6 years ago .
I tried trim function many times to remove white spaces on a table column but it didn’t .
any guide please.
3 Answers 3
Why don’t you just do SELECT REPLACE(column_name, ‘ ‘, ») FROM table_name ?
If you want to remove the white spaces from both left and right side, trim() should do the work for you.
You can check the length of the returned values as follows:
This is working fine for me.
Not the answer you’re looking for? Browse other questions tagged mysql or ask your own question.
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.