mysql:从两边修剪空格和换行符

aiazj4mn  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(322)

mysql有一个内置函数trim(),可以从字符串的两边一次删除一个空格和换行符。但是,要删除备用空格和换行符(例如:'\r\n\r\n foo bar\r\n\r\n'),需要几个修剪循环,可以通过函数中的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循环可能是危险的。
问题
你知道如何优化这段代码吗?有预见到的错误吗?
有没有其他的想法如何做这样的修剪而不做循环?正则表达式?
 
笔记:

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

因此, REGEXP_REPLACE 不可用。

lqfhib0f

lqfhib0f1#

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

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

从另一个答案复制:
https://stackoverflow.com/a/23807798/236528

相关问题