Разве функция MySQL TRIM не обрезает разрывы строк или возврат каретки? - PullRequest
25 голосов
/ 11 ноября 2008

Судя по моим экспериментам, это не так. Если это действительно так, каков наилучший метод удаления разрывов строк? В настоящее время я экспериментирую с параметрами, которые TRIM принимает для удаляемого символа, начиная с обрезки \n и \r.

Ответы [ 10 ]

45 голосов
/ 06 марта 2009

Мои разрывы строк были в середине строки, и я не мог контролировать исходные данные. Следующая команда mysql работала для меня:

REPLACE(FIELD,'\r\n',' ')
17 голосов
/ 03 мая 2011

Да, Trim() будет работать в MySQL. У вас есть два варианта.

1) выберите его:

select trim(BOTH '\n' from [field_name]) as field

Если это не работает, попробуйте '\r', если это не работает, попробуйте '\n\r'.

2) замените неверные данные в вашей таблице обновлением ...

update [table_name] set [field_name] = trim(BOTH '\n' from [field_name])

Я рекомендую сначала выбрать, чтобы определить, какой разрыв строки у вас (\ r или \ n).

9 голосов
/ 14 января 2011

Стандартная функция MySQL trim не похожа на функции обрезки в любых других языках, которые я знаю, поскольку она удаляет только точные совпадения строк, а не любые символы в строке. Эта хранимая функция больше похожа на обычную обрезку, которую можно найти в PHP, или на полосу в python и т. Д.

CREATE FUNCTION `multiTrim`(string varchar(1023),remove varchar(63)) RETURNS varchar(1023) CHARSET utf8
BEGIN
  -- Remove trailing chars
  WHILE length(string)>0 and remove LIKE concat('%',substring(string,-1),'%') DO
    set string = substring(string,1,length(string)-1);
  END WHILE;

  -- Remove leading chars
  WHILE length(string)>0 and remove LIKE concat('%',left(string,1),'%') DO
    set string = substring(string,2);
  END WHILE;

  RETURN string;
END;

После этого вы сможете сделать:

select multiTrim(string,"\r\n\t ");

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

7 голосов
/ 11 ноября 2008

Trim() в MySQL удаляет только пробелы.

Я не верю, что в MySQL есть встроенный способ удаления всех видов конечных и ведущих пробелов, если только вы не используете Trim().

.

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

5 голосов
/ 13 января 2009

select trim(both '\r\n' from FIELDNAME) from TABLE; должно работать, если select trim(both '\n' from FIELDNAME) from TABLE; не работает.

3 голосов
/ 25 января 2009

я мог заставить его работать, только сделав char;

trim(both char(13) from fieldname)
3 голосов
/ 11 ноября 2008
select trim(both '\n' from FIELDNAME) from TABLE;
0 голосов
/ 12 октября 2010

Я столкнулся с той же проблемой с одним из полей. Идеального решения не существует. В моем случае мне повезло, что длина поля должна была равняться 6. Поэтому я использовал запрос типа

update events set eventuniqueid = substring(eventuniqueid, 1, 6) where length(eventuniqueid) = 7;

Вам просто нужно будет выбрать лучший вариант в зависимости от ваших потребностей. Замена '\ n' и '\ r \ n' не сработала для меня и просто закончилась потерей моего времени.

0 голосов
/ 14 сентября 2010

Ответы выше, когда объединены, работают. Полный пример замены разрывов строк в начале и конце поля выглядит следующим образом:

UPDATE table SET field=REPLACE(field, field, TRIM(BOTH '\r\n' FROM field))
0 голосов
/ 28 января 2010

REPLACE(FIELD,'\r\n',' ') отлично работает в базе данных MySql 5.1

...