当下一个字符也是换行符时,我正在尝试删除换行符 使用我在下面编写的函数,即时消息遇到了问题。当我输入此字符串时:
"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 ;
答案 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
时,您会看到索引1
和i=1
处有换行符,因此您用i+1=2
删除了第一个。现在的字符串是:
INSERT()
,然后您执行1\n\n2
01 2 3
。现在SET i = i + 1
是2,但是索引i
和i=2
没有换行符,因此您不会删除下一个换行符。
更改它,以便仅在找不到一对换行符时才递增i+1=3
。
i