首页 > 代码库 > SQL学习之用通配符进行数据过滤
SQL学习之用通配符进行数据过滤
一、Like操作符
之前介绍的所有的操作符都是针对已知值进行过滤。不管匹配一个值还是多个值,检验大于还是小于已知值,或者检查某个范围的值,其共同点是过滤中使用的值都是已知的。
但是这种方法并不是任何时候都好用。有如下代码:
select ItemId,ItemName,CheckValueNum,CheckValueString,ResultLevel from T_Check_InfoDetail
需求:现在需要检索ItemName中包含"心率"的行记录,这个时候使用简单的比较操作符肯定不行,必须使用通配符。利用通配符,可以 创建 比较 特定的数据 的搜索模式,在这里如果我们想找出ItemName包含"心率"的行记录,可以构造一个通配符搜索模式:
通配符:用来匹配值的一部分的特殊字符。
搜索模式:由字面值、通配符或两者组合构成的搜索条件。
而使用通配符搜索模式,必须使用LIKE操作符,LIKE指示DBMS(数据库管理系统),后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。
这里上面提出的检索要求我们还没有完成,在下面介绍完通配符后再完成上面的检索任务。
二、通配符
1、百分号(%)通配符
这个通配符使我们日常开发中最常使用的通配符,在搜索串中,%表示任何字符出现任意次数,现在我通过"%"通配符来完成上面提出的需求代码如下:
select ItemId,ItemName,CheckValueNum,CheckValueString,ResultLevel from T_Check_InfoDetail where ItemName LIKE ‘心率%‘
ok,完成了上面的需求。
这段代码使用了搜索模式‘心率%‘,在执行这条子句时,将检索任意ItemName列值以‘心率‘开头的词。%告诉DBMS(数据库管理系统)接收‘心率‘之后的任意字符,不管他有多少字符。
下面我们盖面上面的需求,检索ItemName列值中包含‘范围‘的行数据,这个时候用上面‘范围%‘的搜索模式就无法搜索出来,下面是解决代码:
select ItemId,ItemName,CheckValueNum,CheckValueString,ResultLevel from T_Check_InfoDetail where ItemName LIKE ‘%范围%‘
搜索模式‘%范围%‘表示匹配任何位置上包含文本‘范围‘的值,不论他之前或之后出现什么字符。
这里表示搜索ItemName列值中包含‘范围‘的行数据,不论它之前或者之后出现什么字符。
下面再次更改上面的需求,检索ItemName列值中以‘心‘开头,以‘定‘结尾的行数据。下面是解决代码:
select ItemId,ItemName,CheckValueNum,CheckValueString,ResultLevel from T_Check_InfoDetail where ItemName LIKE ‘心%定‘
这段代码使用了搜索模式‘心%定‘,在执行这条子句时,将检索任意ItemName 列值以‘心‘开头,已‘定‘结尾的行数据,%告诉DBMS(数据库管理系统)接收‘心‘之后,‘定‘之前的任意字符,不管这中间有多少字符。
在使用‘%‘匹配的时候,需要注意的几点:
1、%几乎可以匹配任何东西,但有个例外,这就是null。
2、注意搜索模式‘心%定 ‘,发现定后面有一个空格,而这个空格恰好改变了我们的检索的初衷,这时候DBMS回去匹配以‘定 ‘结尾的行数据,所以在使用通配符匹配数据的时候,一定要注意空格。
2、下划线( _ )通配符
SQL学习之用通配符进行数据过滤