mysql like查询语句%、_、escape等通配符的用法详解
mysql like语句中的通配符有:百分号、下划线和escape三种。
mysql like %通配符
表示任意个或多个字符。可匹配任意类型和长度的字符。
select * from user where uname like '%李';
%李 表示以“李”字符结尾,而前面可以是任意字符
select * from user where uname like '李%';
李% 表示以“李”字符开头,而后面可以是任意字符
select * from user where uname like '%李%';
%李% 表示查询字段里任意位置包含“李”字,这种情况包含(%李 李%)这2种情况。
MySQL LIKE 区分大小写
MySQL LIKE 匹配字符时,默认是不区分大小写的,如果需要在匹配的时候区分大小写,可以加入 BINARY 操作符:
SELECT * FROM user WHERE uname LIKE BINARY '%abb%'
SELECT * FROM user WHERE uname LIKE BINARY '%aBB%'
BINARY 操作符表示按照二进制进行比较,因此加上该操作符后,便可以严格区分大小写,因此以上两条 SQL 查询出来的内容是不同的。
MySQL LIKE 中文字符匹配
由于数据存储编码问题,在某些情况下,MySQL 进行 LIKE 搜索返回的数据中除了符合要求的数据外,往往还会返回许多不相干的数据。这时候也需要在 LIKE 后面加上 BINARY 操作符以进行二进制比较:
SELECT * FROM user WHERE uname LIKE BINARY '%李%'
提示
当在 LIKE 匹配时加上 BINARY 操作符后,则会严格区分英文大小写。因此当检索的内容是中英文混合且需要忽略英文大小写的时候,就会遇到麻烦。为解决此问题,需要引入 MySQL 中的 UPPER() 与 CONCAT() 函数:
- UPPER():将英文字符串变大写,同UCASE()
- CONCAT():将多个字符串连接成一个字符串
语法如下:
UPPER(str)
CONCAT(str1,str2,...)
因此当我们要进行中英文混合匹配检索且要忽略英文大小写时,可以使用如下例所示的 SQL 语句:
SELECT * FROM user WHERE UPPER(uname) LIKE BINARY CONCAT('%',UPPER('a中文b'),'%')
MySQL 多个 LIKE查询 ,可结合 AND 使用
另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM user WHERE uname LIKE '%三%' AND uname LIKE '%猫%'
若使用
SELECT * FROM user WHERE uname LIKE '%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
mysql like _ 通配符
表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)
select * from user where uname like '_';
select * from user where uname like '李_';
select * from user where uname like 'h_李';
mysql like escape 通配符
escape 转义 % _
如果查询语句要查%或者_,怎么办呢?
可以使用escape,转义字符后面的%或_就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用
select uname from user where uname like '%li/_%' escape '/';
select uname from user where uname like '%li/%%' escape '/';
版权声明
本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:
愿本站的内容能为您的学习、工作带来绵薄之力。
评论