美文网首页SQL必知必会
SQL学习05 用通配符进行过滤

SQL学习05 用通配符进行过滤

作者: ATHAS | 来源:发表于2017-07-30 12:12 被阅读0次

    通配符(wildcard)

    用来匹配值的一部分的特殊字符。

    搜索模式(search pattern)

    由字面值、通配符或两者组合构成的搜索条件。

    通配符本身实际上是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。

    谓词(predicate)

    操作符何时不是操作符?答案是,它作为谓词时。从技术上说,LIKE是谓词而不是操作符。虽然最终的结果是相同的,但应该对此术语有所了解,以免在SQL文献或手册中遇到此术语时不知所云。

    通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。

    百分号(%)通配符

    %表示任何字符出现任意次数

    所有以词Fish起头的产品,可发布以下SELECT语句:

    SELECT prod_id,prod_name

    FROM Products

    WHERE prod_name LIKE'Fish%';

    需要特别注意,除了能匹配一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。

    说明:请注意后面所跟的空格

    包括Access在内的许多DBMS都用空格来填补字段的内容。例如,如果某列有50个字符,而存储的文本为Fish bean bag toy(17个字符),则为填满该列需要在文本后附加33个空格。这样做一般对数据及其使用没有影响,但是可能对上述SQL语句有负面影响。子句WHERE prod_name LIKE 'F%y'只匹配以F开头、以y结尾的prod_name。如果值后面跟空格,则不是以y结尾,所以Fish bean bag toy就不会检索出来。简单的解决办法是给搜索模式再增加一个%号:'F%y%'还匹配y之后的字符(或空格)。更好的解决办法是用函数去掉空格。请参阅第8课。

    警告:请注意NULL

    通配符%看起来像是可以匹配任何东西,但有个例外,这就是NULL。子句WHERE prod_name LIKE '%'不会匹配产品名称为NULL的行。

    下划线(_)通配符

    只匹配单个字符,而不是多个字符。

    方括号([ ])通配符

    说明:并不总是支持集合

    它也只能匹配单个字符

    与前面描述的通配符不一样,并不是所有DBMS都支持用来创建集合的[]。只有微软的Access和SQL Server支持集合。为确定你使用的DBMS是否支持集合,请参阅相应的文档。

    例如,找出所有名字以J或M起头的联系人,可进行如下查询:

    SELECT cust_contact

    FROM Customers

    WHERE cust_contact LIKE'[JM]%' --'[^JM]%' 表否定

    ORDER BY cust_contact;

    此通配符可以用前缀字符^(脱字号)来否定

    当然,也可以使用NOT操作符得出类似的结果。^的唯一优点是在使用多个WHERE子句时可以简化语法:

    SELECT cust_contact

    FROM Customers

    WHERE NOT cust_contact LIKE'[JM]%'

    ORDER BY cust_contact;

    相关文章

      网友评论

        本文标题:SQL学习05 用通配符进行过滤

        本文链接:https://www.haomeiwen.com/subject/poydjttx.html