удаление соседних символов новой строки sql - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь удалить символы новой строки, когда следующий символ также является новой строкой используя функцию, которую я написал ниже, и я столкнулся с проблемой. Когда я ввожу эту строку:

"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 голосов
/ 04 сентября 2018

Альтернативный способ написания вашей функции, так что вам не нужно вручную отслеживать индексацию символов.

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

У меня не было возможности проверить это в базе данных, поэтому синтаксис может быть не на 100% правильным.

0 голосов
/ 04 сентября 2018

Проблема в том, что вы увеличиваете 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. Теперь 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...