mysql - 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 循环可能很危险。
问题
- 知道如何优化此代码吗?任何预见的错误?
- 任何其他想法如何在没有 WHILE DO 循环的情况下进行此类修剪?正则表达式?
笔记:
SHOW VARIABLES LIKE "%version%"
version 5.6.39-83.1
因此,REGEXP_REPLACE
不可用。
解决方案
这似乎是一个更好的解决方案:
UPDATE FOO set FIELD2 = TRIM(Replace(Replace(Replace(FIELD2,'\t',''),'\n',''),'\r',''));
从另一个答案复制:
推荐阅读
- css - Vue 样式共享组件
- python - 如何计算 Python 数据框中字符串的出现次数?
- java - 在Java中使用for循环比较数组时修改静态方法以添加两个计数器
- sql - 如何解决“此子查询最多可以返回一条记录”
- python - 从 Azure 函数获取托管标识访问令牌时出错
- javascript - Javascript 根据条件创建新数组
- java - 如何将 Java 记录用作 ModelMapper 的 DTO?
- javascript - 如何在vue js内联单击@click事件上进行乘法运算
- vb.net - visual studio 2019 我怎么知道要导入的引用和路径设置
- node.js - async/await 用于 aws sdk 功能