`
snake_hand
  • 浏览: 574252 次
社区版块
存档分类
最新评论

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

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

通配符

描述

示例

%

包含零个或更多字符的任意字符串

WHERE title LIKE “%computer%“ 将查找处于书名任意位置的包含单词 computer 的所有书名。例如:mycomputers

_

下划线,表示任何单个字符

WHERE aufname LIKE “_ean“ 将查找以 ean 结尾的所有4 个字母的名字(DeanSean 等)

[ ]

指定范围 ([a-f]) 或集合 ([abcdef])

的任何单个字符

WHERE aulname LIKE “[C-P]arsen“ 将查找以arsen 结尾且以介于 C P 之间的任何单个字符开始的作者姓氏。

例如:CarsenLarsenKarsen

[^]

不属于指定范围 ([a-f]) 或集合 ([abcdef])

的任何单个字符

WHERE aulname LIKE “de[^l]%“ 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。例如:dedean等符合,但是de|de|an等则不符合。

===============================================================================
参考推荐:
分享到:
评论

相关推荐

    pgsql查询优化之模糊查询实例详解

    前言 一直以来,对于搜索时模糊匹配...然后搜个简单的模糊匹配条件如 LIKE “血常规%”,可以发现查询计划生成如下,索引并没有被使用上,这是因为传统的btree索引并不支持模糊匹配 查阅文档后发现,pgsql可以在Btree

    精通SQL 结构化查询语言详解

    《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供317个典型应用,读者可以随查随用,针对SQL Server和Oracle进行讲解,很有代表性。 全书共包括大小实例317个,突出了速学速查的特色。《精通SQ:结构化查询语言...

    精通SQL--结构化查询语言详解

    6.5 使用like进行模糊查询 109 6.5.1 like运算符 109 6.5.2 “%”通配符 110 6.5.3 “_”通配符 112 6.5.4 “[]”通配符 114 6.5.5 使用escape定义转义符 115 第7章 连接符、数值运算与函数 117 7.1 本章实例...

    Oracle数据库Sql语句详解大全

    使用LIKE、BETWEEN、IN进行模糊查询 第三章 单行函数 熟悉各种类型单行函数的使用 掌握转换函数的使用 第四章 关联查询 在一张或多张表中使用等值或非等值连接 使用外连接查询 自连接查询 第五章 组函数 定义及...

    oracle sql语言模糊查询--通配符like的使用教程详解

    主要介绍了oracle sql语言模糊查询--通配符like的使用教程详解,非常不错,具有参考借鉴价值,需要的朋友参考下吧

    详解SQL EXISTS 运算符

    EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。 SQL EXISTS 语法 SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name FROM table_name ...

    对Django项目中的ORM映射与模糊查询的使用详解

    ORM映射 什么是ORM映射?...进行模糊查询 开始进行查找前我们先来认识filter()方法。 这是一个过滤器方法用于过滤掉不符合条件的元素。 值得一提的是其内自带方法函数的引用方式为‘__方法名称’。 __exac

    详解MyBatis模糊查询LIKE的三种方式

    模糊查询也是数据库SQL中使用频率很高的SQL语句,这篇文章主要介绍了详解MyBatis模糊查询LIKE的三种方式,非常具有实用价值,需要的朋友可以参考下

    Mysql面试过关!(详解:索引+常用引擎+常见问题+sql调优)

    3.3 模糊查询时(like语句),模糊匹配的占位符位于条件的首部 3.4 索引列参使用了函数 3.5 参数类型与字段类型不匹配,导致类型发生了隐式转换,索引失效 3.6 查询条件使用or关键字,其中一个字段没有创建索引,则...

    【SQL Server】查询总结–知识详解与回顾

    文章目录1、为表起别名as2、查询前n部分数据:top n 列名:表示查看前n行3、排序:order by 列名1 asc(升序)|desc(降序),列名1 asc|desc…4、消除重复行:distinct5、条件查询:写在where后面6、模糊查询:用于...

    oracle sql语言模糊查询–通配符like的使用教程详解

    oracle在Where子句中,可以对datetime、char、varchar字段类型的列用Like子句配合通配符选取那些“很像…”的数据记录,以下是可使用的通配符: % 零或者多个字符 _ 单一任何字符(下划线) ...

    Mysql| 使用通配符进行模糊查询详解(like,%,_)

    通配符的分类: %百分号通配符: 表示任何字符出现任意次数 (可以是0次). _下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符. like操作符: LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接...

    SQL Server时间戳功能与用法详解

    本文实例讲述了SQL Server时间戳功能与用法。分享给大家供大家参考,具体如下: 一直对时间戳这个概念比较模糊,相信有很多朋友也都会误认为:时间戳是一个时间字段,每次增加数据时,填入当前的时间值。其实这误导...

    SQL中使用ESCAPE定义转义符详解

     在使用LIKE关键字进行模糊查询时,“%”、“_”和“[]”单独出现时,会被认为是通配符。为了在字符数据类型的列中查询是否存在百分号 (%)、下划线(_)或者方括号([])字符,就需要有一种方法告诉DBMS,将LIKE...

    MySQL查询条件常见用法详解

    本文实例讲述了MySQL查询条件常见...模糊查询 范围查询 空判断 比较运算符 等于: = 大于: > 大于等于: >= 小于: < 小于等于: <= 不等于: != 或 <> 例1:查询编号大于3的学生 select * from students where i

    Oracle中instr和substr存储过程详解

    instr和substr存储过程,分析内部大对象的内容 instr函数 instr函数用于从指定的位置开始,从大型对象中查找第N个与模式匹配的字符串。 用于查找内部大对象中的字符串的instr函数语法如下: dbms_lob.instr( ...

    MySQL全面瓦解之查询的正则匹配详解

    上一章 查询的过滤条件,我们了解了MySQL可以通过 like % 通配符来进行模糊匹配。同样的,它也支持其他正则表达式的匹配,我们在MySQL中使用 REGEXP 操作符来进行正则表达式匹配。用法和like相 似,但又强大很多,...

    MySQL高效模糊搜索之内置函数locate instr position find_in_set使用详解

    不过locate()只要找到返回的结果都大于0(即使是查询的内容就是最开始部分),没有查找到才返回0; 指定起始位置: SELECT LOCATE('bar','foobarbar',5);(从foobarbar的第五个位置开始查找) 2.使用instr()函数(据说是...

    Java经典面试题整理及答案详解(三)

    1.使用MyBatis做模糊查询的时候,在日志中看到执行了sql语句,但是查询不到结果。 面对这样的问题,如果可以看到后台的日志出现有相关的信息显示,那么就表示现在的整体环境搭建是没有任何问题的,但是为什么数据...

    neo4j学习资料汇总(各种优质博文和neo4j教程整理)

    │ Neo4j模糊查询及分页查询 - c1052981766的专栏 - CSDN博客.html │ neo4j笔记 - Neo4j 中文社区.html │ Neo4j语句 - zhuweiba_321的博客 - CSDN博客.html │ Neo4j语句 - 阿里云.html │ 【程裕强的专栏】...

Global site tag (gtag.js) - Google Analytics