且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Mysql函数删除少于3个字符的单词

更新时间:2023-01-19 21:15:19

假设只有空格将单词分开,则可以使用以下内容:-

Assuming that only spaces split the words, you can use something like the following:-

SELECT SomeId, GROUP_CONCAT(SomeWord ORDER BY aNum SEPARATOR " ")
FROM (SELECT SomeId, SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(" ", SomeText, " "), " ", aNum), " ", -1) AS SomeWord, aNum, item_title_default
FROM SomeTable
CROSS JOIN (SELECT 1 + a.I + b.i * 10 + c.i * 100 AS aNum FROM integers a, integers b, integers c) SubInt
WHERE aNum <= (LENGTH(SomeText) - LENGTH(REPLACE(SomeText, " ", "")) + 2)
AND LENGTH(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(" ", SomeText, " "), " ", aNum), " ", -1)) > 3
ORDER BY SomeId, aNum) Sub1
GROUP BY SomeId

这依赖于整数表,该表具有一个称为i的单列,其行的值介于0到9之间.它可以处理多达1000个单词,但很容易扩展.

This relies on a table of integers with a single column called i, with the rows with values 0 to 9. It copes with up to 1000 words but is easily extended.

编辑-好的,这是一个MySQL存储过程,用于拆分字符串并删除长度不超过3个字符的任何单词.再次只在空格处分割.

EDIT - OK, here is a MySQL stored procedure to split the string up and remove any word 3 or less characters long. Again only splits on spaces.

DELIMITER //

CREATE FUNCTION `func_Remove_ShortStrings`(InStr LONGTEXT) RETURNS LONGTEXT
    DETERMINISTIC
BEGIN

    DECLARE RetStr LONGTEXT DEFAULT "";
    DECLARE TempStr LONGTEXT DEFAULT "";
    DECLARE aWord LONGTEXT DEFAULT "";
    DECLARE WordLength INT DEFAULT 0;
    SET TempStr = TRIM(InStr);
    WHILE (LENGTH(TempStr) > 0) DO
        SET aWord = SUBSTRING_INDEX(TempStr, " ", 1);
        SET WordLength = LENGTH(aWord);
        IF (WordLength > 3) THEN
            SET RetStr = CONCAT(RetStr, " ", aWord);
        END IF;
        SET TempStr = TRIM(SUBSTRING(TempStr, WordLength + 1));
    END WHILE;

    return TRIM(RetStr);
END