sql语句的各种模糊查询

一般模糊语句如下:

SELECT 字段 FROM 表 WHERE 某字段 Like 条件

其中关于条件,SQL提供了四种匹配模式:

1、%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

比如 SELECT * FROM [user] WHERE u_name LIKE ‘%三%‘

将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE ‘%三%‘ AND u_name LIKE ‘%猫%‘

若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%猫%‘ 
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

2、_: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

比如 SELECT * FROM [user] WHERE u_name LIKE ‘_三_‘
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

再比如 SELECT * FROM [user] WHERE u_name LIKE ‘三__‘;
只找出“三脚猫”这样name为三个字且第一个字是“三”的;

3、[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

比如 SELECT * FROM [user] WHERE u_name LIKE ‘[张李王]三‘
将找出“张三”、“李三”、“王三”(而不是“张李王三”);

如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE ‘老[1-9]‘
将找出“老1”、“老2”、……、“老9”;

4、[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

比如 SELECT * FROM [user] WHERE u_name LIKE ‘[^张李王]三‘
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;

SELECT * FROM [user] WHERE u_name LIKE ‘老[^1-4]‘;
将排除“老1”到“老4”,寻找“老5”、“老6”、……

5、查询内容包含通配符时

由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:

function sqlencode(str)
str=replace(str,"[","[[]") ‘此句一定要在最前
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function

在查询前将待查字符串先经该函数处理即可。

时间: 2024-08-14 16:17:46

sql语句的各种模糊查询的相关文章

通过带参数的Sql语句来实现模糊查询(多条件查询)

#region 通过带参数的Sql语句来实现模糊查询(多条件查询) StringBuilder sb = new StringBuilder("select * from books"); List<string> listWheres = new List<string>(); List<SqlParameter> listParams = new List<SqlParameter>(); if (txtBookName.Text.T

sql语句中【模糊查询like的使用】

1.like的使用: 在数据库软件中进行测试时,书写的格式是: 比如: select * from fdx.dbo.[User] where 1=1 and name like '%'+'a'+'%'//查找名字中含有‘a’的所有用户的信息

如何从页面SQL语句进行相关后台查询

前几天刚刚做了一个页面书写sql语句,到后台查询相关结果的案例,给大家分享一下.有不足之处请大家多指教!!! 一.页面:因为查询的表不固定,所以表格需要自助生成(这是利用了"jqGrid") 若是不利用"jqGrid"也可以参考方法2. 方法1. <div> <nobr> <div> <form method="get" action="/management/transactionFlow/i

SQL语句关于时间的查询小心得,希望大家给点意见

查询本月信息:Select * FROM T_Users Where datediff(month,RegisterTime,getdate())=0 昨天的信息:SELECT * FROM T_Users where LastLoginTime>DATEADD(DAY,-2,GETDATE()) AND LastLoginTime<GETDATE() SELECT SUM([DetailMoney]) FROM [dbo].[T_BuyDetails] INNER JOIN [dbo].[T

SQL语句--分组的Top查询

代码 SELECT A.* FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY Host ORDER BY Host,count(EntranceURL) DESC) AS ROW, Host, EntranceURL as PageURL ,count(EntranceURL) as EnterTimes ,sum(CASE WHEN IsBounce=1 THEN 1 ELSE 0 END ) AS BounceTimes FROM UserLoyalt

hibernate中使用sql语句进行表链接查询,对结果集的遍历方法

今天做了一个在hibernate中使用sql语句进行表链接查询的功能,得到的属性是来自两个表中的字段.下面对结果集遍历的方法进行记录. sql语句不写了.部分代码如下: List<Course_Material> list = new ArrayList<Course_Material>(); @SuppressWarnings("rawtypes") List accountList = query.list(); if(accountList.size()&

MyBatis中动态SQL语句完成多条件查询

http://blog.csdn.net/yanggaosheng/article/details/46685565 MyBatis中动态SQL语句完成多条件查询 <select id="queryEmp"  resultType="cn.test.entity.Emp"> select * from emp where 1=1 <if test="deptNo!=null"> and deptno=#{deptNO} &

Orancle的SQL语句的多表查询和组函数

Orancle的SQL语句的多表查询和组函数一.SQL的多表查询:1.左连接和右连接(不重要一方加(+))SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHERE e.deptno(+)=d.deptno ;(+)在等号左边是右连接,反之左连接.2.交叉连接 (CROSS JOIN产生笛卡尔积)SELECT FROM emp CROSS JOIN dept ;3.自然连接 (NATURAL JOIN)自动关联字段匹

SQL Server数据库--》top关键字,order by排序,distinct去除重复记录,sql聚合函数,模糊查询,通配符,空值处理。。。。

top关键字:写在select后面 字段的前面 比如你要显示查询的前5条记录,如下所示: select top 5 * from Student 一般情况下,top是和order by连用的 order by用在表名的后面 order by后面就填你要按它排序的字段,是升序排序(从小到大排序) percent:百分比 %=percent 比如要显示5%的数据处理,不能写top 5%,而是top 5 percent 提示:如果top 5 percent出来的数是3.1条数据的话,是取四条数据,而不