【问题标题】:How to select part of a text on mysql?如何在mysql上选择部分文本?
【发布时间】:2010-08-31 11:48:14
【问题描述】:

我在 mysql 上有一列保存为 LONGTEXT。此文本保存富文本。我目前正在阅读所有文本,然后使用 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 text summarization


    【解决方案1】:

    部分解决方案是选择文本剥离使用

    这是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

    【讨论】:

    • 你确定来自这个函数吗?我试了一下,花了很长时间,直到现在才返回结果,好像进入了无限循环。
    • 我从 mysql 站点 cmets 获取这个函数我链接到这个页面:dev.mysql.com/doc/refman/5.0/en/string-functions.html,他运行这个函数并得到结果,你的字段大小是多少?
    • 你可以在 web 中查看另一个条形标签功能,我在 artfulsoftware.com/infotree/queries.php?&bw=1280discussweb.com/database-support/… 中找到了另一个
    • 我觉得discussweb.com/database-support/…的功能更好,试试吧
    • 我现在在查询中发布了工作函数我正在执行以下操作:` select SUBSTRING(fnStripTags(col),1,100) from table` 但是我仍然有两个问题,首先是它与换行的情况下,句子被合并在一起,连空格都没有,第二个是句子可能以不完整的单词结尾。
    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多