MySQL SELECT查询字符串匹配

时间:2011-02-06 21:18:13

标签: sql mysql string match

通常,在使用SELECT查询数据库时,通常需要查找与给定搜索字符串匹配的记录。

例如:

SELECT * FROM customers WHERE name LIKE '%Bob Smith%';

该查询应该为我提供所有记录,其中'Bob Smith'出现在名称字段的任何位置。

我想做的恰恰相反。

我想找到姓名字段在“Robert Bob Smith III,PhD。”中的所有记录,而不是查找在名称字段中包含“Bob Smith”的所有记录,这是查询的字符串参数。

5 个答案:

答案 0 :(得分:39)

只需转动LIKE

SELECT * FROM customers
WHERE 'Robert Bob Smith III, PhD.' LIKE CONCAT('%',name,'%')

答案 1 :(得分:10)

你可以使用这样的正则表达式:

SELECT * FROM pet WHERE name REGEXP 'Bob|Smith'; 

答案 2 :(得分:1)

您也可以使用

SELECT * FROM customers WHERE name LIKE "%Bob Smith%";

注意双引号

答案 3 :(得分:-1)

在上面的查询中如果我们使用某些特殊字符进行搜索,例如:'__'或'()',而不是检索所有数据,

SQL> select * from test_brck其中NVL(UPPER(v_name),1)LIKE nvl(UPPER('%'||& v_name ||'%'),NVL(UPPER(v_name),1));

输入v_name的值:'_'

旧2:其中NVL(UPPER(v_name),1)LIKE nvl(UPPER('%'||& v_name ||'%'),NVL(UPPER(v_name),1))

新2:其中NVL(UPPER(v_name),1)LIKE nvl(UPPER('%'||'_'||'%'),NVL(UPPER(v_name),1))

V_NAME

Ramu(去了gbl)

Ramj

Ramu_Karan(去了blr)

Sidd_Karan

ABC%^

XY123

ABC

选择了7行。

<强>输出:

Ramu_Karan(去了blr)

Sidd_Karan

答案 4 :(得分:-3)

不正确:

SELECT * FROM customers WHERE name LIKE '%Bob Smith%';

相反:

select count(*)
from rearp.customers c
where c.name  LIKE '%Bob smith.8%';

select count只会查询(总计)

C会将db.table链接到您需要索引的名称行

LIKE应该是obvs

8将调用DB 8或更少的所有引用(不是真的需要,但我喜欢整洁)