我试图删除换行字符时,下一个字符也是一个换行使用我写了下面的函数,我遇到了一个问题。当我输入这个字符串时:
"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条答案
按热度按时间y1aodyip1#
另一种编写函数的方法,这样就不必手动跟踪字符索引。
我没有机会在数据库中测试这个,所以语法可能不是100%正确。
vojdkbi02#
问题是你增加了
i
替换换行后。考虑以下简单字符串:什么时候
i
是1
,可以看到索引处有新行i=1
以及i+1=2
,所以用INSERT()
. 现在字符串是:你知道吗
SET i = i + 1
. 现在i
是2,但是索引i=2
以及i+1=3
没有换行符,所以不删除下一个换行符。改变它,使你只增加
i
当你找不到一对新线的时候。