更新时间: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