2010-08-31 7 views
0

У меня есть столбец, сохраненный как LONGTEXT на mysql. Этот текст сохраняет богатый текст. В настоящее время я читаю весь текст, а затем исправляю его с помощью javascript, чтобы получить первые символы 100, чтобы не разбить слово в середине.Как выбрать часть текста в mysql?

Но этот способ не представляется лучшим способом сделать это. Я хочу выбрать резюме напрямую с помощью запроса, но я также хочу быть осторожным, чтобы не включать символы, которые являются тегами 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 ; 

ответ

0

часть раствора для выбора текста раздели Используйте

Это mysql функция как функция PHP strip_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? 

так что вам нужно использовать substring + strip_tags

+0

Вы уверены, от этой функции? Я пробовал это, и это заняло много времени, и до сих пор он не возвращал результат, как если бы он входил в бесконечный цикл. – Luci

+0

Я беру эту функцию из комментариев сайта mysql. Я ссылаюсь на эту страницу: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html, он запускает эту функцию и получает результаты, что размер вашей области? –

+0

вы можете посмотреть другую функцию тэгов в сети, я нашел другую в http://www.artfulsoftware.com/infotree/queries.php?&bw=1280 или в http://www.discussweb.com/database-support/ 4575-how-strip-html-tags-mysql.html –