在 MySQL 中,INSTR函数和REGEXP函数、LIKE 关键字都可以用于搜索匹配字段中的指定内容。 如果想匹配到的结果除外请使用NOT REGEXP、NOT LIKE语句,INSTR不包含用公式等于0表达。INSTR函数和REGEXP函数、LIKE 关键字都不区分大小写,如果需要区分大小写,可以加入 BINARY 关键字。
在选择需要查询的数据库和表后,选择搜索选项卡在对应的字段的运算符为LIKE或者NOT LIKE。在值列输入想要搜索的值。
INSTR(<列名>, <字符串>);
其中,函数返回列名在字符串中的位置,如果未找到,则返回0。
expr REGEXP pat
expr(字符串)匹配指定的 pat(正则表达式)字符串就返回1 ,否则0。
SELECT <列名1>,...<列名n> FROM <表名> WHERE <列名> LIKE <匹配模式>;
LIKE 子句中使用百分号 %字符来表示任意字符。如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
在 like 的条件查询中提供了四种匹配模式。
%:表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。
[]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
[^] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
在 student表中,查找所有包含“三”的学生姓名,SQL 语句和运行结果如下。
原始数据
mysql> SELECT * from student; +----+-----------+-------+ | id | name | score | +----+-----------+-------+ | 1 | 张三名 | 80 | | 2 | 李四浩 | 90 | | 3 | 王五期 | 70 | | 4 | 赵六三 | 40 | | 5 | 三七熊 | 60 | +----+-----------+-------+
mysql> SELECT * FROM student WHERE INSTR(name, '三'); +----+-----------+-------+ | id | name | score | +----+-----------+-------+ | 1 | 张三名 | 80 | | 4 | 赵六三 | 40 | | 5 | 三七熊 | 60 | +----+-----------+-------+
或
mysql> SELECT * FROM student WHERE INSTR(name, '三')>0; +----+-----------+-------+ | id | name | score | +----+-----------+-------+ | 1 | 张三名 | 80 | | 4 | 赵六三 | 40 | | 5 | 三七熊 | 60 | +----+-----------+-------+
把包含“三”字的姓名都列出来
把包含“三”字的姓名都列出来
mysql> SELECT * FROM student WHERE name like '%三%'; +----+-----------+-------+ | id | name | score | +----+-----------+-------+ | 1 | 张三名 | 80 | | 4 | 赵六三 | 40 | | 5 | 三七熊 | 60 | +----+-----------+-------+
如果查询内容中包含通配符,可以使用“\”转义符。例如,在 tb_students_info 表中,将学生姓名“Dany”修改为“Dany%”后,查询以“%”结尾的学生姓名,SQL 语句和运行结果如下:
mysql> SELECT NAME FROM test.`tb_students_info` WHERE NAME LIKE '%\%'; +-------+ | NAME | +-------+ | Dany% | +-------+ 1 row in set (0.00 sec)
把包含“三”字的姓名都列出来
mysql> SELECT * FROM student WHERE name REGEXP '三'; +----+-----------+-------+ | id | name | score | +----+-----------+-------+ | 1 | 张三名 | 80 | | 4 | 赵六三 | 40 | | 5 | 三七熊 | 60 | +----+-----------+-------+
注意:匹配的字符串必须加单引号或双引号。“%”通配符可以到匹配任意字符,但是不能匹配 NULL。 |
名称 | 包含 | 匹配开头 | 匹配结尾 | 不匹配 |
---|---|---|---|---|
INSTR | INSTR(name, '三') | INSTR(name, '三')=1 | - | INSTR(name, '三')=0 |
REGEXP | name REGEXP '三' | name REGEXP '^三' | name REGEXP '三$' | name not REGEXP '三' |
LIKE | name like '%三%' | name like '%三' | name like '三%' | name not like '%三%' |
INSTR>LIKE>REGEXP。
REGEXP通常会用于比较复杂的匹配当中。