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

Pat*_*ick 8 mysql sql

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

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

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

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

anu*_*ava 9

对于这个任务,我建议在MySQL中使用RegExp功能,如下所示:

select * from EMP where name RLIKE 'jo|ith|der';
Run Code Online (Sandbox Code Playgroud)

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

  • 这非常有用.复制另一个查询的结果列表,将每个换行符更改为管道,这非常有效. (2认同)

Dev*_*art 4

你可以做这样的事情 -

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

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

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

SELECT 'bigD' SOUNDS LIKE 'big-D';
+---------------------------+
| 'bigD'SOUNDS LIKE 'big-D' |
+---------------------------+
|                         1 |
+---------------------------+
Run Code Online (Sandbox Code Playgroud)

例子:

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 |
+-------+
Run Code Online (Sandbox Code Playgroud)