gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:32:39 26 4
gpt4 key购买 nike

我有一个问题。

在我的数据库中,我有某些存储过程,可以对我拥有的关键字执行搜索。在我的 GUI(在 asp.net 中)中,我有一个函数可以解决我的问题,但我在 Mysql 中需要相同的函数。

我需要从少于 3 个字符的单词中删除字符串,只保留包含更多字符的单词。例如,“hotels in amsterdam”将返回“hotels amsterdam”。

编辑:这些字段位于 innodb 全文中,因此我需要实际删除所有少于 3 个的单词,因为我的存储过程获取所有“”并将其替换为“+”。全文搜索采用 bool 模式。我根本不需要在任何行上执行此操作。我只需要一个函数,从少于 3 个字符的单词中删除字符串。该函数将在存储过程中使用,然后该存储过程将搜索修改后的字符串值的行

我的 SQL 编程技能不如 .Net,我花了 2 天的时间寻找一个可以为我完成此操作的函数,但运气不佳。

很抱歉,但到目前为止我什至没有任何代码来开始工作,还有其他人知道如何继续或解决这个问题吗?由于存储函数或触发器中不允许使用动态 sql,所以我完全陷入困境!

提前致谢!

最佳答案

假设只有空格分隔单词,您可以使用如下内容:-

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 个单词,但很容易扩展。

编辑 - 好的,这是一个 MySQL 存储过程,用于拆分字符串并删除任何 3 个或更少字符长的单词。同样,仅在空格上进行分割。

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

关于Mysql函数删除少于3个字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16143337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com