LIKE查询中如何返回子字符串位置



我从MySQL数据库中检索数据使用一个简单的SELECT from WHERE LIKE不区分大小写的查询,其中我在LIKE子句中转义任何%_,所以真正的用户只能执行基本的文本研究,不能混淆regex,因为我然后在LIKE子句中自己用%包围它。

对于这个查询返回的每一行,我必须使用JS脚本再次搜索,以便在原始字符串中找到子字符串的所有索引。我不喜欢这种方法,因为如果它与LIKE查询使用的模式匹配不同,我不能保证算法是相同的。

我发现MySQL函数POSITIONLOCATE可以实现它,但他们只返回第一个索引,如果它被找到或0,如果没有找到。是的,你可以设置第一个索引来搜索,通过搜索,通过传递之前返回的索引作为第一个索引,直到新返回的索引为0,你可以找到子字符串的所有索引,但这意味着很多额外的查询,它可能最终会减慢我的应用程序很多。

所以我现在想知道:是否有办法让LIKE查询返回子字符串位置直接,但我没有找到任何,因为我缺乏MySQL词汇(我是一个新手)。

简单回答:不。

更长的回答:MySQL没有语法或机制来返回任何数组——无论是从SELECT还是存储过程。

可能的答案是:您可以编写一个循环遍历一个结果的存储过程,查找结果并将它们打包到一个逗号中。但我害怕代码会如此混乱。我会很快决定写JS代码,就像你已经做过的那样。

这个故事的寓意:SQL不是一门完整的语言。它在存储和有效检索大量方面很出色,但在字符串操作或数组(除了"rows"方面很糟糕。

Commalist

如果你实际上是在搜索一个简单的列表,用逗号分隔的东西,那么MySQL中的FIND_IN_SET()SUBSTRING_INDEX()可以紧密匹配JS对字符串的分割(逗号)方法。

最新更新