删除相邻的换行符SQL

时间:2018-09-03 22:06:00

标签: mysql sql

当下一个字符也是换行符时,我正在尝试删除换行符  使用我在下面编写的函数,即时消息遇到了问题。当我输入此字符串时:

"Line1
 Line2

 Line3 



 Line4"

它删除了第1行和第2行之后的换行符,但是第3行和第4行之间的行仍然保留吗?关于为什么该功能不起作用的任何想法?

DELIMITER $$
DROP FUNCTION IF EXISTS removeLines;
CREATE FUNCTION test_dev.removeLines(address varchar(255)) 
RETURNS varchar(255)
DETERMINISTIC
BEGIN
DECLARE i int;
SET i = 0;
WHILE i < length(address)-1 DO
      IF(((SUBSTR(address,i,1) in (CHAR(10) ,CHAR(13))) AND (SUBSTR(address,i+1,1) in (CHAR(10) ,CHAR(13)))   ) )                                                               
      THEN set  address = INSERT(address,i,1,'');
            SET i= i+1;
      ELSE set i= i+1;
      END IF;
END WHILE;
RETURN address;
 END$$
DELIMITER ;

2 个答案:

答案 0 :(得分:2)

另一种编写函数的方法,因此您不必手动跟踪字符索引。

while instr(address, '\r\n\r\n') do
   address = replace(address, '\r\n\r\n', '\r\n');
end while;

我没有机会在数据库中对此进行测试,因此语法可能不是100%正确。

答案 1 :(得分:1)

问题是替换换行符后您增加了# Run monitor in the background python3 monitor.py & # Run postgres normally docker-entrypoint.sh "$@" 。考虑下面的简单字符串:

i

1\n\n\n2 01 2 3 4 -- indexes i时,您会看到索引1i=1处有换行符,因此您用i+1=2删除了第一个。现在的字符串是:

INSERT()

,然后您执行1\n\n2 01 2 3 。现在SET i = i + 1是2,但是索引ii=2没有换行符,因此您不会删除下一个换行符。

更改它,以便仅在找不到一对换行符时才递增i+1=3

i