gpt4 book ai didi

mysql - 有没有办法在 MySQL 语句中通过 REGEXP 进行排序?

转载 作者:可可西里 更新时间:2023-11-01 07:58:59 25 4
gpt4 key购买 nike

我有什么

SELECT CONCAT(`names`,' ',`office`) `bigDataField`
FROM `item_table`
HAVING `bigDataField` REGEXP "jessy|c";

还返回只包含字母“c”的数据,所以我想按大多数相同的匹配字符进行排序,这可能吗?

注意:单词和字符会因用户输入而改变。所以可以只有一个字符,也可以是几个甚至几个词。

sql fiddle http://sqlfiddle.com/#!2/dc87e/1

感谢大家的帮助

最佳答案

您可以按任何表达式排序。

regexp 返回指定正则表达式的匹配数

所以,这个:

order by `bigDataField` regexp 'c' desc

将首先按其中包含最多 cbigDataField 对您的数据进行排序,所以我想这不是您要查找的内容。您可以使用多个 CASE-WHEN 来检查模式匹配的长度(警告:性能不佳 - 不推荐用于大表)

试试这个

SELECT CONCAT(`names`,' ',`office`) `bigDataField`, 
CASE WHEN CONCAT(`names`,' ',`office`) regexp 'jessy' > 0 then length('jessy') * (CONCAT(`names`,' ',`office`) regexp 'jessy') ELSE
CASE WHEN CONCAT(`names`,' ',`office`) regexp 'c' > 0 then length('c') * (CONCAT(`names`,' ',`office`) regexp 'c') ELSE 0 END
END as charmatchcount

FROM `item_table`
HAVING `bigDataField` REGEXP "jessy|c"
ORDER BY charmatchcount desc

为避免上述问题,您必须使用外部库,或创建您自己的函数。您可能会发现此线程有帮助 MySQL - Return matching pattern in REGEXP query

关于mysql - 有没有办法在 MySQL 语句中通过 REGEXP 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20143565/

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