历史版本11 :模糊查询 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1. 问题描述编辑
模糊查询,是一种很方便的查询方式,用来查询符合某种指定格式的数据,比如想查询所有包含a字符的数据,就可以使用模糊查询。
2. 实现思路编辑
模糊查询是利用sql关键字加上通配符“_”,“%”等组合进行查询的。
3.方法示例编辑
3.1 "%":表示任意0个或多个字符
Select * from 表名 where 列名 like '%'; //查询出全部 支持Oracle 支持sqlserver 支持mysql
Select * from 表名 where 列名 like 'x'; //完全匹配查询 支持Oracle 支持sqlserver 支持mysql
Select * from 表名 where 列名 like '%x'; //右为x,前面可以有任意位字符 支持Oracle 支持sqlserver 支持mysql
Select * from 表名 where 列名 like 'x%'; //左为x,后面可以有任意位字符 支持Oracle 支持sqlserver 支持mysql
Select * from 表名 where 列名 like '%x%'; //中间为x,左右都可以有任意位字符 支持Oracle 支持sqlserver 支持mysql
3.2 "_":表示单个字符
Select * from 表名 where 列名 like '_x'; //右为x,前面有一位字符 支持Oracle 支持sqlserver 支持mysql
Select * from 表名 where 列名 like '__x'; //右为x,前面有两位位字符 支持Oracle 支持sqlserver 支持mysql
Select * from 表名 where 列名 like 'x__'; //左为x,后面有两位位字符 支持Oracle 支持sqlserver 支持mysql
3.3 "[]":表示括号内所列字符中的一个
指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
注:如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
Select * from 表名 where 列名 like '[张李王]三' //将找出“张三”,“李三”,“王三”(而不是“张李王三”); 不支持Oracle 支持sqlserver 不支持mysql
Select * from 表名 where 列名 like '老[1-9]' //将找出“老1”,“老2”,……,“老9”; 不支持Oracle 支持sqlserver 不支持mysql
select * from 表名 where regexp_like(列名,'[张李王]三') 支持Oracle 不支持sqlserver 不支持mysql
select * from 表名 where 列名 rlike '[张李王]三' 不支持Oracle 不支持sqlserver 支持mysql
select * from 表名 where 列名 regexp '[张李王]三' 不支持Oracle 不支持sqlserver 支持mysql
3.4 "[^]":表示不再括号列中的单个字符
其取值与[]相同,但它要求所匹配对象为指定字符意外的任一字符。Select * from 表名 where 列名 like '[^张李王]三' //将找出不姓“张”,“李”,“王”的“赵三”,“孙三”等;不支持Oracle 支持sqlserver 不支持mysql
Select * from 表名 where 列名 like '老[^1-4]'; //将排除“老1”到“老4”,寻找“老5”,“老6”、…… 不支持Oracle 支持sqlserver 不支持mysql
Select * from 表名 where 列名 like '老[^1-4]'; //将排除“老1”到“老4”,寻找“老5”,“老6”、…… 不支持Oracle 支持sqlserver 不支持mysql
select * from 表名 where regexp_like(列名,'[^李王]三') 支持Oracle 不支持sqlserver 不支持mysql
select * from 表名 where 列名 rlike '[^李王]三' 不支持Oracle 不支持sqlserver 支持mysql
select * from 表名 where 列名 regexp '[^李王]三' 不支持Oracle 不支持sqlserver 支持mysql
3.5 特殊字符模糊查询
当要查询的字符串包含通配符的时候,可以采用下面的方法来查询
用[ ]将特殊字符包含:select * from 表名 where 列名 like '_[%]_' 不支持Oracle 支持sqlserver 不支持mysql
用\将特殊字符转义:select * from 表名 where 列名 like '_\%_' 不支持Oracle 不支持sqlserver 支持mysql
用escape关键字将特殊字符转义:select * from 表名 where 列名 like '_\%_' escape '\' 支持Oracle 不支持sqlserver 不支持mysql
4.备注编辑
注:ACCESS的模糊查询比较特殊是'?','*' 。 如 Select * from 表名 where 列名 like '*b*'
以上测试数据的数据库版本为:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
Microsoft SQL Azure (RTM) - 12.0.2000.8 Mar 27 2018 19:48:20 Copyright (C) 2018 Microsoft Corporation
mysql 5.6.28-cdb2016-log