MySQL: пробелы TRIM и переводы строк с обеих сторон

0

MySQL имеет встроенную функцию TRIM(), которая может удалять пробелы и новые строки по одному с обеих сторон строки. Однако для удаления альтернативных пространств и новых строк (например: '\ r\n\r\n foo bar\r\n\r\n') потребуется несколько циклов TRIM, которые могут быть выполнены через WHILE DO в функции:

DELIMITER $$
CREATE DEFINER='localhost' FUNCTION 'trim_all'('_s1' TEXT) RETURNS text CHARSET utf8 COLLATE utf8_unicode_ci
    NO SQL
BEGIN

    DECLARE _s2 TEXT DEFAULT '';

    WHILE( CHAR_LENGTH(_s1) != CHAR_LENGTH(_s2) ) DO
        SET _s2 = _s1;
        SET _s1 = TRIM(TRIM('\r' FROM TRIM('\n' FROM _s1)));
    END WHILE;

    RETURN _s1;

END$$
DELIMITER ;

Несмотря на то, что эта функция работает (пока), это кажется более сложным для такой простой задачи. Кроме того, такие циклы WHILE DO могут быть опасными.

Вопросы

  1. Любая идея, как оптимизировать этот код? Любая предвиденная ошибка?
  2. Любая другая идея, как сделать такую обрезку без WHILE DO? Regex?


Заметки:

SHOW VARIABLES LIKE "%version%"
version     5.6.39-83.1

Поэтому REGEXP_REPLACE недоступен.

Теги:

1 ответ

-1

Это похоже на лучшее решение:

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

Скопировано из этого другого ответа:

qaru.site/questions/55844/...

  • 0
    Ваш код удаляет все вхождения новых строк. Это поведение отличается от того, которое я описал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню