mysql怎么匹配数字 mysql 单个字符匹配( 二 )


SELECT * FROM user WHERE username LIKE BINARY '%小%'
提示
当在 LIKE 匹配时加上 BINARY 操作符后,则会严格区分英文大小写 。因此当检索的内容是中英文混合且需要忽略英文大小写的时候,就会遇到麻烦 。为解决此问题,需要引入 MySQL 中的 UPPER() 与 CONCAT() 函数:
UPPER():将英文字符串变大写,同UCASE()
CONCAT():将多个字符串连接成一个字符串
语法如下:
UPPER(str)
CONCAT(str1,str2,...)
因此当我们要进行中英文混合匹配检索且要忽略英文大小写时,可以使用如下例所示的 SQL 语句:
SELECT * FROM username WHERE UPPER(username) LIKE BINARY CONCATt('%',UPPER('a中文b'),'%')
在该 SQL 中,将搜索的字段及检索的内容都进行大写转换后,再进行二进制匹配 。
LIKE 运算符的效率
LIKE 运算符要对字段数据进行逐一扫描匹配,实际执行的效率是较差的 , 哪怕该字段已经建有索引(a% 这种方式会用到索引) 。当数据量较大时,要尽可能的减少 LIKE 运算符的使用,也没有太多优化的余地 。
mysql 正则查询问题MySQL中的模式匹配(标准SQL匹配和正则表达式匹配)
1. 使用LIKE和NOT LIKE比较操作符(注意不能使用=或!=);
2. 模式默认是忽略大小写的;
3. 允许使用”_”匹配任何单个字符,”%”匹配任意数目字符(包括零字符);
MySQL还提供象UNIX实用程序的扩展正则表达式模式匹配的格式:
1. 使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE , 他们是同义词);
2. REGEXP模式匹配与被匹配字符的任何地方匹配,则匹配成功(即只要被匹配字符包含或者可以等于所定义的模式,就匹配成功);
不同于LIKE模式匹配 , 只有和整个值匹配 , 才匹配成功(即只有被匹配字符完全和所定义的模式匹配,才匹配成功)
3. REGEXP默认也是不区分大小写,可以使用BINARY关键词强制区分大小写;
如:SELECT * FROM pet WHERE name REGEXP BINARY ‘^B’;
4. 正则表达式为一个表达式 , 它能够描述一组字符串 。REGEXP操作符完成MySQL的扩展正则表达式匹配 。REGEXP实现的功能是如果被匹配字符中部分或完全符合所定义的表达式描述的字符,则表示匹配成功 。
1)最简单的正则表达式是不含任何特殊字符的正则表达式,如hello 。
SELECT * FROM pet WHERE name REGEXP ‘hello’;表示的意思是如果name这列的某一行包含hello这个单词,则匹配就成功了 。(注意和LIKE的区别,LIKE要求name这列的某一行必须完全等于hello,才匹配成功) 。
2)非平凡的正则表达式 , 除了含有最简单表达式那些东西 , 还需要采用特殊的特殊结构,用到的字符,往下看 。(因此,通常的正则表达式是普通单词和这些正则表达式字符构成的表达式)
5. 扩展正则表达式的一些字符:
1) ‘.’匹配任何单个字符;
2) […]匹配在方括号内的任何字符,可以使用’-’表示范围,如[a-z],[0-9],而且可以混合[a-dXYZ]表示匹配a,b,c,d,X,Y,Z中的任何一个;(注意使用括号以及’|’的方法也可以达到相同的效果,如(a|b|c)匹配a,b,c中的任何一个);此外可以使用’^’表示否定,如[^a-z]表示不含有a-z中间的任何一个字符;
3) ‘*’表示匹配0个或多个在它前面的字符 。如x*表示0个或多个x字符,.*表示匹配任何数量的任何字符;
4) 可以将模式定位必须匹配被匹配字符的开始或结尾,在匹配模式前加”^”:表示匹配从被匹配字符的最开头开始 , 在匹配模式后加”$”:表示匹配要进行到被匹配字符的最末尾 。
5) ‘+’表示匹配1个或多个在它前面的字符 。如a+表示1个或多个a字符 。

推荐阅读