• mysql学习2:模糊匹配查询like,regexp,in


    mysql模糊匹配查询like,regexp,in

     

    摘要

    内容比较简单,无摘要。
     

    关键词

    模糊查询  like  regexp  in  contact

     

    正文

    下图是示例用到的数据表信息

     

    MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式

     

    一、SQL模式

    SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。
    注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较操作符。
    语法:SELECT 字段 FROM 表 WHERE 某字段 Like 条件
    其中关于条件,SQL提供了两种种匹配模式:
      1. 百分号(%):示任意个或多个字符,可匹配任意类型和长度的字符。
      示例1:SELECT * FROM character WHERE name LIKE ‘%孙%';即匹配e姓名为“孙行者”,“行者孙,“行者孙”三行数据
      示例2:SELECT * FROM character WHERE name LIke '%孙%' and name like '%行%'; 即匹配姓名为“孙行者”,“行者孙,“行者孙”三行数据
      示例3:SELECT * FROM character WHERE name LIke '%孙%行%‘;只能匹配姓名为“孙行者”一行数据
      注意示例2和示例3的区别
      2.下划线(_):表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)
      示例1:SELECT * FROM character WHERE name LIKE ‘_三_';即把姓名为“唐三藏”的一行数据
      示例2:SELECT * FROM character WHERE name LIKE ‘_三';即把姓名为“唐三”一行数据
     

    二、正则模式

    由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词),以下是正则表达式中常用的字符
      1. “.”匹配任何单个的字符(单字节字符)。一个字符类“[...]”匹配在方括号内的任何字符。
      示例1::“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。
      2. “ * ”匹配零个或多个在它前面的东西。
      示例:“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。
      3. 注意:正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。
      4. “^”匹配名字的开始
      示例:姓名以“孙”开始的 SELECT * FROM role WHERE name REGEXP "^孙";;即匹配姓名为“孙行者”,“孙悟空两行数据
      5. 使用“$”匹配名字的结尾
      示例:示例:姓名以“孙”结尾的 SELECT * FROM role WHERE name REGEXP "孙$";;即匹配姓名为“者行孙”,“行者孙”两行数据
     

    三、in查询

    叫in查询不是很合理 ,更合理的说法是 :in其实和=类似,区别在于:=后面是一个值。in 后面可以是多个值。
      示例1:select * from role where name in("唐三");即匹配姓名为“唐三”一行数据;
      示例2:select * from role where name in("唐三","唐三藏");即匹配姓名为“唐三”,“唐三藏”一行数据;
      示例3:select * from role where name in("唐三","%行者%"),只匹配姓名为“唐三”一行数据;即in查询不支持模糊查询,如示例4
      示例4:select * from role where name in("%行者%"),无匹配结果
     

    四、like contact模糊查询

    CONCAT(str1,str2,…) 函数返回结果为连接参数产生的字符串。
      示例1:select * from role where name like contact("%","三","%");即匹配姓名为“唐三”,“唐三藏”两行行数据;
    like contact模糊查询强大的地方在于可以对传进来的参数进行某查询,比如经前端提交上的数据,赋值给参数name,则可以select * from table where name like contact("%",${name},"%")
  • 相关阅读:
    常见 PL.SQL 数据库操作
    PL/SQL常见设置--Kevin的专栏
    pl/sql编程
    添加List集合覆盖问题
    程序猿感情生活的那些事
    表达式树-理解与进阶
    白话神经网络
    EF Core 数据验证
    c#8内插逐字字符串增强功能
    我的新博客
  • 原文地址:https://www.cnblogs.com/wobuchifanqie/p/6775074.html
Copyright © 2020-2023  润新知