文档章节

SQL模糊查询

Seabiscuit彡
 Seabiscuit彡
发布于 2014/11/20 15:10
字数 1305
阅读 24
收藏 0

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

在查询前将待查字符串先经该函数处理即可,并且在网页上连接数据库用到这类的查询语句时侯要注意:

如Select * FROM user Where name LIKE '老[^1-4]';上面 《'》老[^1-4]《'》是要有单引号的,别忘了,我经常忘!


access

在近日的写Web程序时用到了Access的模糊查询,在Acces里写代码怎么也找不到记录,后来才起来原来Acess和SqlServer的模糊查询是有特别的
条件:查找表A 的Name字段中包括 "B" 的记当
在Access里的代码:

1 Select * from a where name like '*b*'Sql Server查询分析器的代码
Select * from a where name like '%b%'这时你会发现Access里可以找到相关的记录,但把'*'必成'%'就找不到了,原因是Access的模糊查询是'?','*'
和Sql server不一样
以上只是在数据库中的代码,如果要写在程序里可就不能用.'*'了,还是要用'%'
程序:
strSql="select * from a where name like '%b%'"所以如果有朋友和我一样喜欢先在数据库中代码测试,那可就要注意了!!

----------------------------------------------------------------------------------------------------------

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)。
-------------------------------------------------
下 面这句查询字符串是我以前写的,根据变量 zipcode_key 在邮政编码表 zipcode 中查询对应的数据,这句是判断变量 zipcode_key 为非数字时的查询语句,用 % 来匹配任意长度的字符串,从表中地址、市、省三列中查询包含关键字的所有数据项,并按省、市、地址排序。这个例子比较简单,只要你理解了方法就可以写出更 复杂的查询语句。

sql = "select * from zipcode where (address like'%" & zipcode_key & "%') or (city like'%" & zipcode_key & "%') or (province like'%" & zipcode_key & "%') order by province,city,address

  • 存储过程中使用模糊查询的例子:


  • SELECT * FROM Questions where QTitle like ' % [ '+ @KeyWord +' ] % ' and IsFinish = @IsFinsih

  • 语句中成对的方括号是书写格式的关键。


本文转载自:http://www.cnblogs.com/GT_Andy/archive/2009/12/25/1921914.html

共有 人打赏支持
Seabiscuit彡
粉丝 1
博文 15
码字总数 0
作品 0
武汉
程序员
私信 提问
哪些SQL语句会引起全表扫描

本文导读:大家都知道,用SQL语句对数据库进行操作时,如果引起全表扫描会对数据库的性能形成影响,下面向大家简单介绍SQL中哪些情况会引起全表扫描。 1、模糊查询效率很低: 原因:like本身...

zray4u
2016/10/18
81
0
SQL模糊查询通配符_和%处理

下划线和百分号在sql模糊查询like语句中为特殊字符,分别可匹配1个字符和0到多个字符,如果需要真正查询特殊字符得转义,如like 'a_b%' escape '',将匹配前3个字符为a_b的所有记录。 1、Pre...

无知有趣
2014/08/19
0
0
SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 简单概述一下本讲 别名,sql片段简单写一下,模糊查询多写一点 一。别名      别名写在大配置中 二。sql片段   在开...

晨曦dawn
2018/02/22
0
0
sql 优化%不放前面 怎么模糊查询?

看网上好多资料说sql优化 %放在模糊查询的字前,就会放弃索引查询,那请问怎么进行模糊查询呢?这样岂不是要模糊查询的第一个字必须输入正确?

xuezhongyu01
2017/08/28
214
4
java SSH 查询方法的提炼

本人实习项目...学习让自己写的代码规范具有拓展和复用性..... 1、将CURD操作提取出来成抽象方法 2、我当时在想能否把模糊查询方法也精炼一下 这里把之前用户接口里的模糊查询注释掉了 3、用...

暖心先森
2017/08/08
50
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot加载配置文件

想要了解springboot加载配置文件,要了解观察者模式,以及相应的实现方式 1、观察者模式(Publish/Subscribe): 举例说明:   报社方负责出版报纸.     你订阅了该报社的报纸,那么只要报...

鬼才王
24分钟前
0
0
glide 下载golang.org包问题

今天编译Uber的Aresgo。依赖管理用 glide,下载golang.org 包的时候遇到问题。 方法一: 设置 glide mirror glide mirror set https://golang.org/x/mobile https://github.com/golang/mobi...

shengjuntu
36分钟前
0
0
4.线程

线程是操作系统中最小的执行单元。 它本身不是一个程序,而是在程序中运行。 换句话说,线程并不相互独立,并与其他线程共享代码段,数据段等。 这些线程也被称为轻量级进程。 线程状态 新线...

Eappo_Geng
42分钟前
0
0
在Linux上编译LLVM/Clang 8.0.0等全部源代码

本教程使用的操作系统是Ubuntu Linux 18.04.2 LTS版本,要编译的LLVM源代码是8.0.0。 1、安装必要的软件。它们是:build-essential/cmake/swig/python-swigpk/libxml2/libxml2-dev/libncurs...

ryanliue
50分钟前
6
0
毕业季,我的Linux求职之路

秋招终于告一段落了,本硕的七年求学之路也快画上了句号。回首求职的这一段日子,痛苦并快乐着。感谢所有陪伴着我走过这一段路程的同学,所有的辛酸都值得铭记。求职的过程中在网上看了很多的...

linux-tao
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部