删除相邻的换行符sql

fumotvh3  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(303)

我试图删除换行字符时,下一个字符也是一个换行使用我写了下面的函数,我遇到了一个问题。当我输入这个字符串时:

"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 ;
y1aodyip

y1aodyip1#

另一种编写函数的方法,这样就不必手动跟踪字符索引。

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

我没有机会在数据库中测试这个,所以语法可能不是100%正确。

vojdkbi0

vojdkbi02#

问题是你增加了 i 替换换行后。考虑以下简单字符串:

1\n\n\n2
01 2 3 4 -- indexes

什么时候 i1 ,可以看到索引处有新行 i=1 以及 i+1=2 ,所以用 INSERT() . 现在字符串是:

1\n\n2
01 2 3

你知道吗 SET i = i + 1 . 现在 i 是2,但是索引 i=2 以及 i+1=3 没有换行符,所以不删除下一个换行符。
改变它,使你只增加 i 当你找不到一对新线的时候。

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,'');
  ELSE set i= i+1;
  END IF;

相关问题