mysql 中like和正则的用法

利用通配符过滤

       要利用通配符必须使用LIKE

       表示后面的搜索模式用的是通配符匹配而不是相等匹配

      

       %

              概念:表示任意字符出现任意次数

                     包括出现0次

              示例:WHERE prod_name LIKE 'jet%'

              根据MySQL配置,搜索可以区分大小写

                     JET和jet是不一样的

              %出现位置

                     字符串的前中后都可以

              坑

                     有些字符串末尾有空格容易被忽视导致匹配不到

                            比如 %wangle ,匹配不到‘wangle ’

                            解决

                                   在末尾也加上%

                     %虽然能匹配0次,但是不能匹配null

                            比如想直接用 LIKE ‘%’是匹配不到 null值的

       _

              和%类似,区别是_限定匹配一个字符

                     不多也不少必须一个

       注意

              通配符比较慢,非必要不要滥用

              不要把通配符放在搜索模式的最开头,这样最慢

 

正则表达式

       和LIKE类似,用正则必须以REGEXP开头

       表示后面用的都是正则表达式

      

       OR

              REGEPX用 | 来表示 OR

              SELECT prod_name

              FROM products

              WHERE prod_name REGEXP '1000|2000';

                     注意

                            '1000|2000' 中是没空格的

                            |左右不要乱加空格,会认为是字符串的一部分

                            多个|使用的时候不要以为是局部的OR

                                   比如 ‘1|2|3 wagnle’

                                          不是1或2或3王乐

                                          而是'1','2',' wngle'

       IN

              REGEXP用 []表示in

              '[123] wangle'

                     能匹配 '1 wangle' '2 wangle' '3 wangle'

                     也可以写作[1|2|3]但是多此一举…

              [^123]可用

              [0-9]、[a-z]可用

       转义

              用\\转义

                     和常见的一个\转义不同

                     比如要转义\就得三个\\\

              特殊字符 . [] | -

                     .的原意是匹配任意字符

              空白符 \\f \\n \\r \\t \\v

       常见字符集

              [:alnum:] 等于 [a-zA-Z0-9]

              ……

       多次匹配 支持

              + 表示一次或者多次

              ……

       定位符

              来由

                     REGEPX是包含匹配,也就是说在值中的任意位置包含即可

                     那么我们想要在固定的位置包含就要用定位符

              定位符

                     文本的开始 ^

                            ^[0-9]表示以数字开头的文本

                     文本的结束 $

                            e$表示以e结尾的文本
 

                            ^向后修饰

                            $向前修饰

                            REGEXP '^Safe$ 和 LIKE 'Safe'一样

                                   这种前后定位修饰可以做到和LIKE都一样

                     词的开始 [[:<:]]

                     词的结束 [[:>:]]

              注意

                     ^放到[]前面就是定位开头,放到里面就是否定

       技巧

              数据库正则表达式的简单测试办法

                     SELECT 'Hello' REGEXP '[0-9]';

                     SELECT 可以不跟字段 直接跟一个字符串

                            这样连数据库都不需要了

                            就能直接测试REGEXP

       注意

              MySQL仅支持一部分正则表达式

              REGEXP可以匹配列值内出现的

                     LIKE只能匹配整个列值相同的

                     SELECT prod_name

                     FROM products

                     WHERE prod_name LIKE '1000';

                     如果列值中不是完整的‘1000’那么将匹配不到

                     WHERE prod_name REGEXP '1000';就可以匹配到只包含‘1000’的

              REGEXP 可以设定像LIKE一样匹配整个列值

                     利用 ^ 和 $

              大小写

                     MySQL正则中默认不区分大小写

                     可以用BINARY设定不区分大小写

                            WHERE prod_name REGEXP BINARY 'jet'

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值