17

我想运行类似的东西:

select * from table where field in ("%apple%", "%orange%")

有办法吗?或者至少有比为每个关键字动态构建查询更好的方法:

select * from table where field like "%apple%" or field like "%orange%"

谢谢。

4

4 回答 4

19

我不确定它是否比您想出的更好,但您可以使用MySQL 的正则表达式功能

select * from my_table where field rlike 'apple|orange';

此外,正如其他人所提到的,您可以使用MySQL 的全文搜索功能(但前提是您使用的是 MyISAM 引擎)。

于 2009-10-30T21:11:27.970 回答
1

如果您正在尝试这样做,您可能应该查看MySQL 的全文索引。

于 2009-10-30T21:08:41.983 回答
1

也许更好的解决方案是对全文索引使用布尔搜索

编辑:我查了一下,它只支持单词末尾的通配符:

ALTER TABLE table ADD FULLTEXT INDEX (field);

SELECT * FROM table WHERE MATCH (field)
AGAINST ('orange* apple*' IN BOOLEAN MODE);
于 2009-10-30T21:09:01.047 回答
-2

在 Oracle 中,您可以执行以下操作:

select * from table where
regexp_like (column, 'apple|orange', 'i')

您可以使用更复杂的正则表达式。'i' 使它变得不敏感。请参阅Oracle 文档

于 2013-05-08T21:06:21.990 回答