#一般模糊查询语句如下:
SELECT 字段 FROM 表 WHERE 某个字段 LIKE 条件
其中关于条件,SQL提供了四种匹配模式:
在SQL语句中
# 将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。
SELECT * FROM [user] WHERE u_name LIKE '%三%'
# 需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'
# 虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
在Java开发中,查询条件往往是作为参数传递过来的,所以既要使用concat()函数,concat()函数的作用为连接字符串。
select * from user where u_name like concat('%', #{name}, '%')
或者
select * from user e
<where>
<if test="queryDTO.name!= null and queryDTO.name!= ''">
<bind name="likeName" value=" '%' + queryDTO.name +'%' "></bind>
AND e.name like #{likeName}
</if>
</where>
# 只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;、
SELECT * FROM [user] WHERE u_name LIKE '_三_'
# 只找出“三脚猫”这样name为三个字且第一个字是“三”的;
SELECT * FROM [user] WHERE u_name LIKE '三__';
#将找出“张三”、“李三”、“王三”(而不是“张李王三”)
SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
#如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
#将找出“老1”、“老2”、……、“老9”;
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
#将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;
SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'
# 将排除“老1”到“老4”,寻找“老5”、“老6”、……
SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:
function sqlencode(str)
str=replace(str,"[","[[]") '此句一定要在最前
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function
在查询前将待查字符串先经该函数处理即可,并且在网页上连接数据库用到这类的查询语句时侯要注意: 如Select * FROM user Where name LIKE '老[^1-4]';上面 《'》老[^1-4]《'》是要有单引号的,别忘了,我经常忘!
SQL模糊查询,使用like比较关键字,加上SQL里的通配符,请参考以下:
1、LIKE'Mc%'
将搜索以字母 Mc 开头
的所有字符串(如 McBadden)。
2、LIKE'%inger'
将搜索以字母 inger
结尾的所有字符串(如 Ringer、Stringer)。
3、LIKE'%en%'
将搜索在任何位置包含字母 en
的所有字符串(如 Bennet、Green、McBadden)。
4、LIKE'_heryl'
将搜索以字母 heryl 结尾
的所有六个字母的名称(如 Cheryl、Sheryl)。
5、LIKE'[CK]ars[eo]n'
将搜索下列字符串:Carsen、Karsen、Carson 和 Karson
(如 Carson)。
6、LIKE'[M-Z]inger'
将搜索以字符串 inger 结尾、以从 M 到 Z
的任何单个字母开头的所有名称(如 Ringer)。
7、LIKE'M[^c]%'
将搜索以字母 M 开头,并且第二个字母不是 c
的所有名称(如MacFeather)。
如果要区分大小写,应该使用BINARY关键字,如where xxx REGEXP BINARY ‘Hello.000’
SELECT column_list FROM table_name WHERE string_column REGEXP pattern
下表说明了正则表达式中一些常用的元字符和构造。
通配符 | 说明 |
---|---|
^ | 匹配搜索字符串开头处的位置,定位字符串开始的地方,该符号不匹配字符 |
$ | 匹配搜索字符串末尾的位置,定位字符串结束的地方,该符号不匹配字符 |
\b | 定位字符串边界的地方,该符号不匹配字符 |
\B | 定位字符串非边界的地方,该符号不匹配字符,和\b正好相反 |
. | 匹配任何单个字符 |
[…] | 匹配方括号内的任何字符 |
[^…] | 匹配方括号内未指定的任何字符 |
匹配p1或p2模式 | 匹配p1或p2模式 |
* | 匹配前面的字符零次或多次 |
+ | 匹配前一个字符一次或多次 |
{n} | 匹配前几个字符的n个实例 , 作用对象重复n次 |
{m,n} | 从m到n个前一个字符的实例匹配,作用对象重复至少m次,至多n次 |
{m,} | 作用对象重复至少m次 |
[aA@] | 匹配”a”或”A”或”@”其中的一个字符 |
[^aA@] | 匹配除”a”,”A”,”@”之外的一个字符 |
[f-k] | 匹配英文字母”f”到”k”中的一个字符 |
[^f-k] | 匹配非除英文字母”f”到”k”之外的一个字符 |
[f-k0-5] | 匹配英文字母”f”到”k”或数字”0″到”5″中的一个字符 |
[^f-k0-5] | 匹配除英文字母”f”到”k”和数字”0″到”5″之外的一个字符 |
[f-k178] | 匹配”f”到”k”或”1″或”7″或”8″中的一个字符 |
\s | 匹配一个空白字符,包括空格,制表符,换页符 |
\S | 匹配一个非空白字符,和\s正好相反 |
\d | 匹配一个数字字符(0~9) |
\D | 匹配一个非数字字符,和\d正好相反 |
\w | 匹配一个字母或数字或下划线字符 |
\W | 匹配一个非字母、数字、下划线字符,和\w正好相反 |
正则表达式中需要转义的字符
^
$
.
(
)
[
]
{
}
?
+
*
|
\
/
换行符(\n),
回车符(\r),
制表符(\t)
返回 substr 在 str 中第一次出现的位置,如果 substr 在 str 中不存在,返回值为 0 。如果pos存在,返回 substr 在 str 第pos个位置后第一次出现的位置,如果 substr 在 str 中不存在,返回值为0。
SELECT LOCATE('xbar',`foobar`); ###返回0
position可以看做是locate的别名,功能跟locate一样
SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword' )>0
返回str2中str1所在的位置索引,其中str2必须以","分割开。(字段内容必须以“,”隔开才能匹配)
SELECT * FROM `person` WHERE FIND_IN_SET('apply',`name`);