如何在字符串列表中使用LIKE运算符进行比较?

时间:2012-01-19 15:47:06

标签: mysql sql

我有一个查询,我需要在近2000个字符串上运行,能够像使用" IN"那样做一个列表非常有帮助。运算符,但使用LIKE比较操作。

例如,我想查看pet_name是否与其中任何一个(但不完全相同):barfy,max,whiskers,champ,big-D,Big D,Sally

使用它不会区分大小写,也可以使用下划线而不是短划线。还是一个空间。编写大量OR运算符将是一个巨大的痛苦。我在MySQL 5.1上运行它。

在我的特定情况下,我正在寻找文件名,其中差异通常是破折号或下划线,相反的情况。

5 个答案:

答案 0 :(得分:9)

对于这项任务,我建议像这样使用RegExp capabilities in MySQL

select * from EMP where name RLIKE 'jo|ith|der';

这是不区分大小写的匹配,将从多个like / OR条件中保存。

答案 1 :(得分:4)

你可以这样做 -

SELECT FIND_IN_SET(
  'bigD',
   REPLACE(REPLACE('barfy,max,whiskers,champ,big-D,Big D,Sally', '-', ''), ' ', '')
  ) has_petname;
+-------------+
| has_petname |
+-------------+
|           5 |
+-------------+

如果有我们正在寻找的pet_name,它将给出一个非零值(> 0)。

但我建议您创建一个表petnames并使用SOUNDS LIKE函数来比较名称,在这种情况下,'bigD'将等于'big-D',例如:

SELECT 'bigD' SOUNDS LIKE 'big-D';
+---------------------------+
| 'bigD'SOUNDS LIKE 'big-D' |
+---------------------------+
|                         1 |
+---------------------------+

示例:

CREATE TABLE petnames(name VARCHAR(40));
INSERT INTO petnames VALUES
  ('barfy'),('max'),('whiskers'),('champ'),('big-D'),('Big D'),('Sally');

SELECT name FROM petnames WHERE 'bigD' SOUNDS LIKE name;
+-------+
| name  |
+-------+
| big-D |
| Big D |
+-------+

答案 2 :(得分:1)

首先,将所有静态值放在任何临时表中,这将是查找字典。

SELECT * FROM Table t 
WHERE EXISTS (
            SELECT * 
            FROM LookupTable l 
            WHERE t.PetName LIKE '%' + l.Value + '%'
            )

答案 3 :(得分:0)

配置包含这些2000值的列以进行全文搜索。然后您可以使用MySQL的全文搜索功能。请参阅他们的docs

答案 4 :(得分:0)

您可以使用REGEXP。它对我来说就像一个魅力

pet_name regexp'barfy | max | whiskers | champ | you name it'