Как выбрать часть текста на MySQL?
-
25-09-2019 - |
Вопрос
У меня есть колонна, сохраненная как LONGTEXT
на MySQL. Этот текст сохраняет богатый текст. Я в настоящее время читаю весь текст, затем исправляя его, используя JavaScript, чтобы получить первый 100
персонажи в пути не разделяют слово в его середине.
Тем не менее, этот путь не кажется лучшим способом сделать это. Я хочу выбрать сводку непосредственно с помощью запроса, но я также хочу быть осторожным, чтобы не включить символы, которые являются тегами HTML.
Ниже приведена функция, кажется, работает нормально, чтобы разделить HTML.
SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty varchar(4000) )
RETURNS varchar(4000)
DETERMINISTIC
BEGIN
DECLARE iStart, iEnd, iLength int;
WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
BEGIN
SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
SET iLength = ( iEnd - iStart) + 1;
IF iLength > 0 THEN
BEGIN
SET Dirty = Insert( Dirty, iStart, iLength, '');
END;
END IF;
END;
END WHILE;
RETURN Dirty;
END;
|
DELIMITER ;
Решение
Часть решения - выбрать текстовое изменение
Это mysql. Функция, как функция PHP Plass_tags
DROP FUNCTION IF EXISTS htmlStrip;
CREATE FUNCTION htmlStrip(pmXml longtext)RETURNS longtext
DETERMINISTIC
htmlStrip:
BEGIN
DECLARE vStart INTEGER ;
DECLARE vEnd INTEGER ;
DECLARE vResult LONGTEXT;
DECLARE vCount1 INTEGER;
DECLARE vCount2 INTEGER;
SET vResult:=pmXml;
SET vCount1:=LENGTH(vResult)-LENGTH(REPLACE(vResult,'<',''));
SET vCount2:=LENGTH(vResult)-LENGTH(REPLACE(vResult,'>',''));
IF vCount1<>vCount2 THEN
RETURN 'Input Error';
END IF;
WHILE (LOCATE('<',vResult) OR LOCATE('>',vResult)) DO
SET vStart:=LOCATE('<',vResult);
SET vEnd:=LOCATE('>',vResult);
SET vResult:=REPLACE(vResult,SUBSTRING(vResult,vStart,vEnd-vStart+1),'');
END WHILE;
RETURN vResult;
END;
SELECT htmlStrip('<html>hello<body> how r u?</body></html>') AS Result
Result
--------
hello how r u?
так что вам нужно использовать подстрока + strip_tags.
Не связан с StackOverflow