Cómo seleccionar parte de un texto en mysql?
-
25-09-2019 - |
Pregunta
Tengo una columna guarda como LONGTEXT
en MySQL. Este texto ahorra texto enriquecido. Actualmente estoy leyendo todo el texto, luego, fijándolo mediante javascript para obtener los primeros caracteres 100
de una manera no dividir la palabra en su medio.
Sin embargo, esta forma no parece la mejor manera de hacerlo. Quiero seleccionar un resumen directamente a través de la consulta, pero también quiero tener cuidado de no incluir caracteres que son etiquetas HTML.
La función de abajo parece trabajar muy bien para quitar el 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 ;
Solución
parte de la solución es seleccionar el texto uso despojado
Este es el MySQL función como php strip_tags función
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?
lo que es necesario utilizar subcadena + strip_tags
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow