首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除相邻换行符sql

删除相邻换行符sql
EN

Stack Overflow用户
提问于 2018-09-04 06:06:00
回答 2查看 42关注 0票数 0

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

代码语言:javascript
复制
"Line1
 Line2

 Line3 



 Line4"

它删除了第1行和第2行之后的换行符,但保留了第3行和第4行之间的行?有什么想法解释为什么这个函数不能工作吗?

代码语言:javascript
复制
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 ;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-04 06:38:29

问题是您在替换换行符之后递增i。考虑下面这个简单的字符串:

代码语言:javascript
复制
1\n\n\n2
01 2 3 4 -- indexes

i1时,您会看到索引i=1i+1=2处有换行符,因此使用INSERT()删除第一行。现在字符串是:

代码语言:javascript
复制
1\n\n2
01 2 3

然后你做SET i = i + 1。现在i是2,但是索引i=2i+1=3没有换行符,所以不需要删除下一个换行符。

将其更改为仅在找不到两个换行符时递增i

代码语言:javascript
复制
  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;
票数 1
EN

Stack Overflow用户

发布于 2018-09-04 07:19:23

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

代码语言:javascript
复制
while instr(address, '\r\n\r\n') do
   address = replace(address, '\r\n\r\n', '\r\n');
end while;

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52156627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档