MySQL:双方的TRIM空格和换行符

时间:2018-08-06 20:44:55

标签: mysql regex

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不可用。

1 个答案:

答案 0 :(得分:-1)

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

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

从其他答案中复制:

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