来自:amtath > 馆藏分类
配色: 字号:
08 高级条件查询
2012-06-26 | 阅:  转:  |  分享 
  
























































组合WHERE子句

使用IN运算符

NOT运算符

实现模糊查询

本章将介绍如何使用WHERE子句设置更高级的查询条件。例如,查询计算机系的

所有女生;查询中文系或者外语系的所有男生等。此外,还将介绍使用IN、NOT、LIKE

3个运算符和使用通配符进行模糊查询的方法。

高级条件查询

第章

SQL技术与网络数据库开发详解



·94·

8.1组合WHERE子句

本节将教会读者使用AND和OR运算符设置高级查询条件的具体方法。AND和OR两个运算符

可以将单独的条件表达式组合在一起,形成复杂、强大的搜索条件表达式。这种表达式将会满足用户

很多的查询需求。

8.1.1AND运算符

如前所述,AND运算符只有当两边操作数均为True时,最后结果才为True。根据AND的这种运

算规则,人们使用AND描述“与”(而且)的关系,即既满足第一个条件且满足第二个条件时才会通

过审核。下面的几个例题使用AND完成了一些复杂的查询任务。

【例8.1】从Student表中查询计算机系的所有女生,并将结果按学号升序排序。

分析:使用前面所学的知识,只能完成查询计算机系的所有学生或者查询所有女生,而并不能完成查

询不但是计算机系的学生,而且还是女生的任务。这就需要组合这两个条件,因为这两个条件

是“而且”的关系,所以使用AND运算符连接。具体的SELECT语句如下。

SELECT

FROMstudent

WHERE所属院系=''计算机系''

AND性别=''女''

ORDERBY学号

运行结果如图8.1所示。



图8.1例8.1运行结果

图8.1中只有两条记录,这两条记录既满足了是计算机系的学生,又满足了是女生的条件。

【例8.2】从Student表中查询1975年出生的所有学生,并将结果按出生日期升序排序。

(1)如果SQL运行环境为Access,则因为日期型数据中没有时间,可以使用如下SELECT语句

查询。

SELECT

FROMstudent

WHERE出生日期>=#01/01/1975#

AND出生日期<=#12/31/1975#

ORDERBY出生日期

(2)如果SQL运行环境为SQLServer,则因为日期型数据中有时间,所以应当使用如下SELECT

语句查询。

SELECT

第8章高级条件查询



·95·

FROMstudent

WHERE出生日期>=''01/01/1975''

AND出生日期<''01/01/1976''

ORDERBY出生日期

(3)如果SQL运行环境为Oracle,也因为日期型数据中有时间,所以应当使用如下SELECT语

句查询。

SELECT

FROMstudent

WHERE出生日期>=''01/JAN/1975''

AND出生日期<''01/JAN/1976''

ORDERBY出生日期

本例运行结果如图8.2所示。



图8.2例8.2运行结果

上面两个例题的搜索条件中只用了一个AND运算符,实际上根据需要可以使用多个AND组合条

件,例如下面的例题。

【例8.3】从Student表中查询1975年出生的所有女生,并将结果按出生日期升序排序。假设SQL

运行环境为SQLServer。

SELECT

FROMstudent

WHERE出生日期>=''01/01/1975''

AND出生日期<''01/01/1976''

AND性别=''女''

ORDERBY出生日期

运行结果如图8.3所示。



图8.3例8.3运行结果

8.1.2OR运算符

OR运算符只有当两边操作数均为False时,最后结果才为False,只要一边是True,则最后结果为

True。根据OR的这种运算规则,人们使用OR运算符描述“或”(或者)的关系,即当满足任何一个

条件就可以通过审核。下面的几个例题使用OR运算符完成了一些复杂的查询任务。

【例8.4】从Student表中查询中文系的所有学生和外语系的所有学生,并将结果按学号升序排序。

分析:本题两个条件的关系其实是“或”,因为满足任何一个条件就可以通过审核。

SELECT

FROMstudent

SQL技术与网络数据库开发详解



·96·

WHERE所属院系=''中文系''

OR所属院系=''外语系''

ORDERBY学号

运行结果如图8.4所示。



图8.4例8.4运行结果

查询结果中既包含了中文系的所有学生,又包含了外语系的所有学生。这是因为中文系的学生满

足表达式:

所属院系=''中文系''

即为True,所以整个条件表达式:

所属院系=''中文系''OR所属院系=''外语系''

变成了

TrueORFalse

根据OR的运算规则,最终条件表达式的值为True,所以所有中文系的学生都进入了查询结果集

中。同理,所有外语系的学生也都进入了查询结果集,而其他院系的学生都被筛选掉了。

8.1.3AND与OR的优先顺序问题

WHERE子句中可以包含任意数量的AND和OR运算符,并且允许两者结合使用。下面的例题组

合了AND和OR两个运算符,解决了一个查询任务。

【例8.5】从Student表中查询中文系和外语系的所有女生。

分析:前面已经介绍了查询中文系和外语系的学生需要使用OR运算符,又因为要查询这两个系的女

生,所以还得使用AND运算符。编写如下的SELECT语句。

SELECT

FROMstudent

WHERE所属院系=''中文系''

OR所属院系=''外语系''

AND性别=''女''

ORDERBY学号

运行结果如图8.5所示。



图8.5例8.5运行结果1

第8章高级条件查询



·97·

查看运行结果后会发现一个男生进入了查询结果集中,导致这一错误的根源是运算符的优先级问

题。在表达式中,如果同时出现了AND和OR两种运算符,则并非从左到右按顺序运算,而是优先执

行AND,然后执行OR运算符。

了解了运算符的优先级后,上面错误的原因就很容易地找到了。因为上面的条件表达式与下面的

表达式等价。

所属院系=''中文系''OR(所属院系=''外语系''AND性别=''女'')

而该表达式的意思是:中文系的所有学生和外语系的所有女生,因此,查询结果集中出现了中文

系的男生。为了让OR运算符优先执行,可以使用括号,下面的SELECT语句是正确的查询语句。

SELECT

FROMstudent

WHERE(所属院系=''中文系''OR所属院系=''外语系'')

AND性别=''女''

ORDERBY学号

技巧:在有多种运算符的组合条件表达式中,尽量使用括号,即使计算机可能不需要这些括号,但这

样会方便人们阅读和理解复杂的条件表达式,同时也会减小出错的概率。

运行结果如图8.6所示。



图8.6例8.5运行结果2

8.2使用IN运算符

在查询中,有时会遇到这样一种查询任务——指定的字段值只要属于某个集合,就将该记录查询

出来。此时,会用到IN运算符。

8.2.1使用IN运算符

IN运算符的运算规则是:当X在集合{Value1,Value2,……ValueN}中时,表达式

XIN(Value1,Value2,……ValueN)

为True,而X不在集合{Value1,Value2,……ValueN}中时,上面的表达式为False。例如:

8IN(2,5,8,13)

因为8在集合{2,5,8,13}中,所以表达式的值为True。对于

7IN(2,5,8,13)

因为7不在集合{2,5,8,13}中,所以表达式的值为False。下面通过一个例题感受一下使用IN

SQL技术与网络数据库开发详解



·98·

运算符查询数据的方法。

【例8.6】从Course表中查询学分为2、3、4的课程的信息,并按学分降序,课号升序排序。

SELECT

FROMcourse

WHERE学分IN(2,3,4)

ORDERBY学分DESC,课号

运行结果如图8.7所示。



图8.7例8.6运行结果

说明:在IN运算符表达式中,集合必须用圆括号括住,并且各元素之间用逗号(,)分隔。

本例演示了使用IN运算符查询数值型数据的方法,下面再看一个使用IN运算符查询字符型数据

的例题。

【例8.7】从Student表中查询中文系、外语系和计算机系的所有学生,并按院系降序排列。

SELECT

FROMstudent

WHERE所属院系IN(''中文系'',''外语系'',''计算机系'')

ORDERBY所属院系DESC

运行结果如图8.8所示。



图8.8例8.7运行结果

IN运算符还有一个反向运算符——NOTIN。下面的例题使用NOTIN运算符解决了一个查询任务。

【例8.8】从Student表中,查询除中文系、外语系和计算机系以外的其他系的学生,并按院系降

序排列。

SELECT

FROMstudent

WHERE所属院系NOTIN(''中文系'',''外语系'',''计算机系'')

ORDERBY所属院系DESC

运行结果如图8.9所示。

第8章高级条件查询



·99·



图8.9例8.8运行结果

8.2.2使用IN运算符的优点

通过前面几个例题的学习,读者一定会感觉到IN运算符和OR运算符实现的功能是相同的。那么

为什么使用IN运算符呢?因为IN运算符有如下优点。

null当条件很多时,使用IN运算符会使语句更加简洁、清楚。例如,如果将例题8.7,使用OR运

算符改写则其语句为:

SELECT

FROMstudent

WHERE所属院系=''中文系''

OR所属院系=''外语系''

OR所属院系=''计算机系''

ORDERBY所属院系DESC

很明显,此时使用IN运算符会比OR运算符简洁、清楚得多。

nullIN运算符的执行速度要比OR运算符更快。

nullIN运算符最大的优点是:其后条件列表集合中,可以放置其他SELECT语句,即子查询。下

面通过一个例题体现该优点。

【例8.9】从Score表中,查询所有学生的“心理学”的考试成绩和平时成绩,并按考试成绩降序

排列,当考试成绩相同时按平时成绩降序排列。

分析:因为Score表中没有课名只有课号,因此,必须从Course表中找到“心理学”的课号,然后根

据这一课号从Score表中查询考试成绩和平时成绩。

SELECT学号,考试成绩,平时成绩

FROMscore

WHERE课号IN(SELECT课号

FROMcourse

WHERE课名=''心理学'')

ORDERBY考试成绩DESC,平时成绩DESC

运行结果如图8.10所示。



图8.10例8.9运行结果

SQL技术与网络数据库开发详解



·100·

SELECT语句中,子查询

SELECT课号

FROMcourse

WHERE课名=''心理学

的查询结果是“心理学”的课号,如果将其单独运行,则结果如图8.11所示。



图8.11子查询运行结果

因此,整个SELECT语句就会变成如下形式。

SELECT学号,考试成绩,平时成绩

FROMscore

WHERE课号IN(‘002’)

ORDERBY考试成绩DESC,平时成绩DESC

所以,本例的SELECT语句查出了所有学生的“心理学”的考试成绩和平时成绩。关于子查询的

详细内容可查看本书后面的内容。

8.3NOT运算符

NOT运算符的作用是对其后的表达式求反。下面通过两个例题介绍NOT运算符的使用方法。

【例8.10】从Student表中查询来源地不是北京市和广东省的所有学生。

SELECT

FROMstudent

WHERENOT(来源地=''北京市''OR来源地=''广东省'')

运行结果如图8.12所示。



图8.12例8.10运行结果

如果本例中不使用NOT运算符,而采用不等于(<>)运算符,则大多数初学者可能会编写如下

的SELECT语句。

SELECT

FROMstudent

WHERE来源地<>''北京市''

OR来源地<>''广东省''

第8章高级条件查询



·101·

运行结果如图8.13所示。



图8.13使用“<>”运算符得到的运行结果1

从图8.13中可以看到,结果集中包含了北京市和广东省的学生,因为当指针指向广东省的学生时,

表达式

来源地<>''北京市’

的值为True,根据OR运算符的规则,整个表达式的值也为True,所以广东省的学生被包含进了结果

集,因为类似的原因,北京市的学生也被包含进了结果集中。所以,上面使用不等于运算符的SELECT

语句是错误的,下面的语句才是正确语句。

SELECT

FROMstudent

WHERE来源地<>''北京市''

AND来源地<>''广东省''

运行结果如图8.14所示。



图8.14使用“<>”运算符得到的运行结果2

NOT运算符不仅可以对表达式求反,还可以和一些特殊运算符结合使用,例如前面介绍的ISNOT

NULL、NOTBETWEEN和NOTIN等就是结合使用的例子。下面演示NOTBETWEEN的用法。

【例8.11】从Student表中,查询出生日期不在1978—1980年之间(包含1978和1980年)的所

有学生。

(1)假设SQL运行环境为SQLServer,则其SELECT语句如下所示。

SELECT

FROMstudent

WHERE出生日期NOTBETWEEN''01/01/1978''AND''12/31/1980''

运行结果如图8.15所示。

SQL技术与网络数据库开发详解



·102·



图8.15例8.11运行结果

说明:在本书中,因为出生日期的时间部分都为0,所以上面的查询能够正确运行。如果时间部分不为

0,则应当编写另外的语句查询,下面列出一种具体的方法,其中,DATEPART函数的相关内

容可查看本书函数部分的内容。

SELECT

FROMstudent

WHEREDATEPART(YY,出生日期)NOTBETWEEN1978AND1980

(2)假设SQL运行环境为Access,则其SELECT语句如下所示。

SELECT

FROMstudent

WHERE出生日期NOTBETWEEN#01/01/1978#AND#12/31/1980#

(3)假设SQL运行环境为Oracle,则其SELECT语句如下所示。

SELECT

FROMstudent

WHERE出生日期NOTBETWEEN''01/JAN/1978''AND''31/DEC/1980''

注意:在设置查询条件时,应尽量避免使用否定条件,例如NOTBETWEEN、NOTIN等,因为有些

DBMS不能优化这些条件查询。

8.4实现模糊查询

有时只知道需要查询内容的一部分,例如,只知道某学生姓名中含有“三”字,而并不清楚完整

姓名是什么,此时如果想要查询该学生的信息,用前面所学的内容是很难做到的,使用通配符和LIKE

运算符可以解决这类问题。本节将介绍LIKE运算符和几种通配符的使用方法。

8.4.1LIKE运算符

结合使用LIKE运算符和通配符可以对表进行模糊查询,即仅仅使用查询内容的一部分查询数据

库中存储的数据。当然,LIKE运算符也可以单独使用,单独使用时,其功能与等于运算符(=)相同。

不过,需要注意的是LIKE运算符只支持字符型数据。下面的例题演示了LIKE运算符的使用方法,因

为没有使用通配符,实际上没有什么太大意义,只是演示了使用方法而已。

【例8.12】从Student表中查询中文系所有学生的信息,并按学号升序排序。

SELECT

FROMstudent

第8章高级条件查询



·103·

WHERE所属院系LIKE''中文系''

ORDERBY学号

运行结果如图8.16所示。



图8.16例8.12运行结果

LIKE运算符也可以和NOT结合使用,例如,下面的例题演示了NOTLIKE的用法。

【例8.13】从Student表中查询不是中文系的学生的信息,并按所属院系升序排序。

SELECT

FROMstudent

WHERE所属院系NOTLIKE''中文系''

ORDERBY所属院系

运行结果如图8.17所示。



图8.17例8.13运行结果

本例中NOTLIKE的功能和不等于(<>)运算符相同。

8.4.2“%”通配符

在SQL语言中,使用百分号(%)通配符代表0个或多个字符。下面列出了几个典型的例子供读

者参考,如表8.1所示。

表8.1百分号(%)通配符举例

百分号(%)通配符举例说明匹配字符串举例

a%代表头字母为“a”的所有字符串“a”、“abc”、“amermenduu?”等

%NBA%代表含有“NBA”的所有字符串

“NBA篮球明星”、“进入NBA的姚明”、

“巴特尔与NBA”等

%nm代表最后两个字母为“nm”的所有字符串“nm”、“123nm”

A%Z

代表头字母为“A”,最后一个字母为“Z”

的所有字符串

“AZ”、“ABCDZ”、“A1212DFAFZ”等

%1983%

代表含有1983的字符串或者日期时间型

数据

“生于1983年”、03/20/1983

说明:如果SQL运行环境为Access,则使用星号()通配符代替百分号(%)通配符。

SQL技术与网络数据库开发详解



·104·

下面的例题演示了结合使用“%”和LIKE运算符,实现模糊查询功能的具体方法。

【例8.14】从Student表中,查询所有姓名中包含“三”字的学生信息。

SELECT

FROMstudent

WHERE姓名LIKE''%三%''

运行结果如图8.18所示。



图8.18例8.14运行结果1

为了更好地体现本例效果,下面在数据表中插入两条新记录,插入语句如下。

INSERTINTOstudent(学号,

姓名,

性别,

出生日期)

VALUES(''0011'',

''周三丰'',

''男'',

''12/20/1981'')



INSERTINTOstudent(学号,

姓名,

性别,

出生日期)

VALUES(''0012'',

''三宝'',

''男'',

''05/15/1983'')

执行下面的查询,查看插入结果。

SELECT

FROMstudent

运行结果如图8.19所示。



图8.19插入新记录后的Student表

再次运行下面的查询语句。

第8章高级条件查询



·105·

SELECT

FROMstudent

WHERE姓名LIKE''%三%''

运行结果如图8.20所示。



图8.20例8.14运行结果2

从图中可以看到结果集中包含了所有姓名中含有“三”字的学生。如果将“%三%”中的第一个“%”

去掉,则查询结果会是什么呢?下面做一个实验,将上面的查询语句改为如下的语句并运行。

SELECT

FROMstudent

WHERE姓名LIKE''三%''

运行结果如图8.21所示。



图8.21例8.14运行结果3

这次的运行结果中只包含了一条记录,因为字符串“三%”只代表头一个字为“三”的所有字符

串。如果将查询语句改为下面的语句:

SELECT

FROMstudent

WHERE姓名LIKE''%三''

则只能查询最后一个字为“三”的所有学生。其运行结果如图8.22所示。



图8.22例8.14运行结果4

8.4.3使用“%”通配符查询日期型数据

有时,使用“%”通配符查询日期时间型数据会很方便,例如,查询1983年出生的所有学生、查

询9月份出生的所有学生等。下面通过几个例题介绍查询日期时间型数据的具体方法。

【例8.15】从Student表中,查询出生于1980年的所有学生。

SELECT

FROMstudent

WHERE出生日期LIKE''%1980%''

运行结果如图8.23所示。

SQL技术与网络数据库开发详解



·106·



图8.23例8.15运行结果

注意:本例中的“%1980%”不可以写为“1980%”或“%1980”。

【例8.16】从Student表中,查询出生于9月份的所有学生。

SELECT

FROMstudent

WHERE出生日期LIKE''09%''

运行结果如图8.24所示。



图8.24例8.16运行结果

【例8.17】从Student表中,查询出生于1975年9月份的所有学生。

SELECT

FROMstudent

WHERE出生日期LIKE''09%1975%''

运行结果如图8.25所示。



图8.25例8.17运行结果

虽然使用“%”通配符查询年份和月份比较方便,但是查询日却并不理想。例如,查询每个月1

日出生的所有学生。此时,使用“%”通配符则不会得到理想的结果。

8.4.4“_”通配符

“%”通配符可以代表0个或多个字符,但是它不能代表指定个数的字符。例如,需要查询姓“周”,

且名字由两个字组成的所有学生。如果使用“%”,则只能查询所有姓“周”的学生,但不能确定名

字只有两个字。例如,下面的SELECT语句。

SELECT

FROMstudent

WHERE姓名LIKE''周%''

运行结果如图8.26所示。



图8.26所有姓“周”的学生

第8章高级条件查询



·107·

因为上述原因出现了下划线(_)通配符,它只代表任意一个字符(包括0个字符)。例如,

“周_”代表以“周”字开头的,最多由两个汉字组成的字符串。

说明:如果SQL运行环境为Access,则使用问号(?)通配符代替下划线(_)通配符。

【例8.18】从Student表中,查询姓“周”,而且名字最多由3个字组成的学生。

SELECT

FROMstudent

WHERE姓名LIKE''周__''

注意:“周”后有两个“_”通配符。

运行结果如图8.27所示。



图8.27例8.18运行结果

【例8.19】从Student表中,查询姓“周”,而且名字必须是3个字的学生。

SELECT

FROMstudent

WHERE姓名LIKE''周__''

AND姓名NOTLIKE''周__''

注意:第一个“周”后有两个“_”通配符,第二个“周”后有一个“_”通配符。

运行结果如图8.28所示。



图8.28例8.19运行结果

“_”通配符也可以不与字符组合,而单独使用。

【例8.20】从Student表中,查询名字最多由两个字组成的所有学生。

SELECT

FROMstudent

WHERE姓名LIKE''__''

运行结果如图8.29所示。



图8.29例8.20运行结果

SQL技术与网络数据库开发详解



·108·

8.4.5“[]”通配符

如果SQL运行环境为SQLServer、Access或SybaseAdaptiveServer,则可以在LIKE运算符中使

用一种特殊的通配符——方括号([])。表8.2列出了方括号通配符的一些例子和说明。

表8.2方括号通配符举例

举例说明

[NR]%代表以“N”或“R”字母开头的所有字符串

[a-d]%ing代表以“a”、“b”、“c”、“d”字母开头,以“ing”结尾的所有字符串

[c-emn]%代表以“c”、“d”、“e”、“m”和“n”字母开头的所有字符串

N[^B]%代表以“N”字母开头,并且第二个字母不是“B”的所有字符串

%197[5-9]%代表1975—1979等5个数字

[1][012]%代表10、11、12等3个数字



下面是两个使用方括号通配符查询数据的例题。

【例8.21】从Student表中,查询姓“张”、“李”或“周”的所有学生,并按姓名升序排序。

SELECT

FROMstudent

WHERE姓名LIKE''[张李周]%''

ORDERBY姓名

运行结果如图8.30所示。



图8.30例8.21运行结果

查询结果集中,包含了所有的姓“张”、“李”、“周”的学生。如果在方括号内的第一个位置

输入符号“^”,则表示取反向值。下面看一个取反向值的例题。

【例8.22】从Student表中,查询除姓“张”、“李”或“周”以外的所有学生,并按姓名升序排序。

SELECT

FROMstudent

WHERE姓名LIKE''[^张李周]%''

ORDERBY姓名

运行结果如图8.31所示。



图8.31例8.22运行结果

第8章高级条件查询



·109·

【例8.23】从Student表中,查询1—5月份出生的所有学生,并按出生日期升序排序。

SELECT

FROMstudent

WHERE出生日期LIKE''[0][1-5]%''

ORDERBY出生日期

运行结果如图8.32所示。



图8.32例8.23运行结果

说明:如果SQL运行环境为Access,则使用感叹号(!)代替(^)。例如,集合否定[^张李周]应当写

为[!张李周]。

8.4.6SQLServer、Access和Oracle中的通配符比较

SQLServer、Access和Oracle中使用的通配符有些是不一样的。SQLServer和Access中允许使用

的通配符要多于Oracle。表8.3对这3个DBMS中能够使用的通配符进行了汇总和比较。

表8.3通配符比较

SQLServerAccessOracle说明

百分号(%)星号()百分号(%)代表0个或多个任意字符

下划线(_)问号(?)下划线(_)代表一个任意字符

(无)井号(#)(无)代表一个数字字符

方括号([])方括号([])(无)代表指定的范围

反方括号([^])反方括号([!])(无)代表指定的范围之外



虽然Oracle中没有方括号和反方括号,但有时可以使用逻辑表达式得到相同的效果。例如:

字段名LIKE[a-z]%



字段名LIKE[^a-z]%

可以使用逻辑表达式

字段名>=''a''AND字段名<=''z''



字段名<=''a''OR字段名>=''z''

得到相同的效果。

8.4.7定义转义字符

前面学习了几种通配符的使用方法,知道了“%5%”代表包含5的所有字符串,如果想要查询最

SQL技术与网络数据库开发详解



·110·

后两个字符为5%的所有字符串呢?即将“%5%”中第二个“%”看作普通字符,而不是通配符,此时

应该定义和使用转义字符。在不同的环境下,定义转义字符的方法也不同。下面学习定义转义字符的

具体方法。

1.SQLServer环境

如果运行环境为SQLServer,则使用ESCAPE关键字定义转义字符。例如,要查询最后两个字符

为百分之五(5%)的所有字符串,其LIKE语句为:

LIKE''%5#%''ESCAPE''#''

其中,

ESCAPE''#''

定义了转义字符“#”,它表示紧跟着“#”后的“%”为普通字符,而并非是通配符。

注意:只有紧跟在转义字符后面的通配符才被看作为转义字符,例如,如果上面的LIKE语句为:

LIKE''%5#%%''ESCAPE''#''

则表示要查询的是包含百分之五(5%)的所有字符串。这里最后一个“%”仍当作通配符来使

用,只有紧跟着“#”的“%”(第二个)才被当作普通字符。

2.Access环境

如果运行环境为Access,则使用方括号([])定义转义字符,将需要看作普通字符的通配符,放入

方括号内即可。例如,要查询包含问号(?)的所有字符串,则在Access中编写LIKE语句为:

LIKE''[?]''

说明:Access中,将问号(?)当作通配符,与前面介绍的下划线(_)通配符的效果相同。

又例如,要查询所有包含“C#”的字符串,则其LIKE语句为:

LIKE''C[#]''

说明:Access中,将井号(#)也当作通配符,它代表一个数字字符。

3.Oracle环境

如果运行环境为Oracle,则使用反斜杠(\)作为转义字符。要查询最后两个字符为百分之五(5%)

的所有字符串,在Oracle中,编写其LIKE语句为:

LIKE''%5\%''

此时需要注意,反斜杠作为转义字符时应当先将其激活。激活的方法为在SQLPlus中使用如下

命令:

setescape\;

定义了转义字符后,要查询所有包含“SQBT_999”的字符串,则其LIKE语句为:

LIKE''%SQBT\_999%''

献花(0)
+1
(本文系amtath首藏)