在MySQL中进行多列REGEX搜索

4

我正在尝试使用正则表达式在我的数据库中搜索多个列。虽然使用许多and/or语句可以实现,但我想知道是否可以使用类似于这样的东西:

SELECT * FROM table REGEXP 'regex' IN (col1, col2, col3,.....)

这样行不通,我只是根据自己的猜测写了这个语法,因为在网上找不到任何类似的信息。这是一个愚蠢的想法还是我忽略了一些非常简单的东西?


我认为正确的关键词是REGEXP而不是REGEX。 - Jeribo
全文搜索,也称为全文检索。 - Mihai
2个回答

7
如果你想在多列中进行 regexp 搜索,则可以执行以下操作:
SELECT * FROM table where CONCAT(col1, col2, col3) REGEXP 'search-pattern';

好的,使用CONCAT()会有什么性能影响的想法吗?它不是要慢得多吗?虽然在这种情况下不是问题,但我来这里是为了学习! - t1m0thy
性能将取决于您尝试连接的列数。此外,这就像在大海捞针一样困难。因此,速度将根据大海的大小而有很大变化。在我看来,如果您需要搜索10个列,则这仍然比写10个带有OR的条件要好。 - anubhava

2
MySQL正则表达式比较的语法是:
expr REGEXP pattern_string

您不能将其与 IN 一起使用。您需要执行以下操作:

SELECT * FROM `table` WHERE
col1 REGEXP 'regex'
OR col2 REGEXP 'regex'
OR col3 REGEXP 'regex'

您也可以使用RLIKE——它们是同义词。


谢谢,那就是我正在做的。这只是一个想法! - t1m0thy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接