美文网首页
六、用通配符进行过滤

六、用通配符进行过滤

作者: 曾经像素有点低 | 来源:发表于2023-02-18 00:37 被阅读0次
    加油吧!工程师.png
    • 什么是通配符
    • 如何使用通配符
    • 怎样使用LIKE操作符进行通配搜索,方便对数据进行复杂过滤

    1、LIKE 操作符

    前边五篇文章都是针对已知值进行过滤的。不管是匹配一个值还是多个值,检验大于还是小于已知值,或者检验某个范围值,其共同点是过滤中使用的值都是已知的

    如果我们想搜索name中包含文本water的所有商品,以上方式就不好使了。
    利用通配符,可以创建比较特定数据的搜索模式。巧妙的解决上述例子中的需求。

    • 通配符(wildcard):
      用来匹配值的一部分的特殊字符。
    • 搜索模式(search pattern)
      由字面值、通配符或两者组合构成的搜索条件。

    tips:
    ①在搜索子句中使用通配符,必须使用LIKE操作符。
    ②从技术上说,LIKE是谓词不是操作符
    ③通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。

    1.1 百分号(%)通配符

    在搜索串中“%”表示任何字符出现任意次数。
    例如:找出所有water开头的商品名

    SELECT  id, name, number
    FROM goods
    WHERE name LIKE 'water%';
    
    • “%”告诉DBMS接受water之后的任意字符,不管它有多少字符。

    说明:根据DBMS的不同及其配置,搜索可以是区分大小写的。如果区分大小写,WATer1111就不匹配。

    通配符可以在搜索模式中的任意位置使用,并且可以使用多个通配符:

    SELECT   id,  name,  price
    FROM  goods
    WHERE  name  LIKE  '%water man%'
    

    '%water man%'表示匹配任何位置上包含文本"water man"的值.

    特别注意:

    • ①除了能匹配一个或者多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的任意个(0个1个或多个)字符。
    • ②有些DBMS用空格来填补字段的内容。(例如name列有30个字符,而存储的文本为water只有五个字符,那么后边会被25个空格填满。)这样做一般对数据及其使用没有什么影响。但是可能对一些sql语句有负面影响。比如,LIKE 'w%r',是要检索以w开头,以r结尾的name。但是因为water后边跟着25个空格,water就不会被检索出来...
    • ③通配符不能匹配NULL。LIKE '%'不会匹配name为NULL的行。
    1.2下划线(_)通配符

    下划线的用途与%一样,但是它只匹配单个字符,而不是多个字符。

    说明: DB2不支持通配符(_)
    
    SELECT id, name, price
    FROM goods
    WHERE name LIKE '__termelon'
    

    (我输入了两个下划线)。
    这样就能匹配出name为:
    watermelon、tatermelon、12termelon、22termelon....的行
    但是termelon、1termelon...这些都不能匹配。
    因为搜索模式要求匹配两个通配符,而不是0个、1个。
    如果使用'%termelon'代替'__termelon'那么上述结果都会被检索出来。

    %能匹配多个字符不同,一个_只能匹配匹配一个字符,不能多也不能少。

    1.3、方括号( [ ] )通配符

    方括号[ ]通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。

    tips:并不是所有的DBMS都支持用来创建集合的[ ]。
    微软的SQL Server支持集合,
    但是MySQL,Oracle,DB2,SQLite都不支持。

    例如:找出所有名字以L或M开头的联系人

    SELECT  c_contact
    FROM Customer
    WHERE c_contact LIKE '[JM]%'
    ORDER BY c_contact;
    
    • [JM]匹配方括号中任意一个字符,它也只能匹配单个字符。
    • [JM]之后的%通配符匹配第一个字符之后的任意数目的字符。

    [ ]通配符可以使用^(脱字号)来否定。

    例如:查询用J和M以外的字符开头的联系人名。(不用J也不用M开头的)

    SELECT c_contact
    FROM Customers
    WHERE c_contact LIKE  '[^JM]%'
    ORDER BY c_contact;
    

    效果等于NOT操作符的否定。
    脱字号^的优势在于:使用多个WHERE子句时可以简化语法。

    SELECT c_contact
    FROM Customers
    WHERE NOT c_contact LIKE  '[JM]%'
    ORDER BY c_contact;
    

    2.使用通配符的技巧

    SQL通配符虽然很有用,但是通配符搜索一般比前面五篇文章讨论的其他搜索要耗费更长的处理时间。

    以下是使用技巧:

    • ①不要多度使用通配符。如果其它操作符能达到相同的目的,应该使用其它操作符。
    • ②在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来时最慢的。
    • ③仔细注意通配符的位置。如果放错地方,坑那个不会返回想要的数据。
      但是,通配符依然是一种极其重要和有用的搜索工具。

    相关文章

      网友评论

          本文标题:六、用通配符进行过滤

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