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
不可用。
1条答案
按热度按时间lqfhib0f1#
这似乎是一个更好的解决方案:
从另一个答案复制:
https://stackoverflow.com/a/23807798/236528