首页 > 解决方案 > MySQL:两边的TRIM空格和换行符

问题描述

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 循环的情况下进行此类修剪?正则表达式?

 


笔记:

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

因此,REGEXP_REPLACE不可用。

标签: mysqlregex

解决方案


这似乎是一个更好的解决方案:

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

从另一个答案复制:

https://stackoverflow.com/a/23807798/236528


推荐阅读