SQL 通配与转义

今天项目碰到一个问题,关于sql模糊查询的通配和转义,在网上查一些资料,整理一下

 

  1. 通配符 说明


  _    与任意单字符匹配 


  %    与包含一个或多个字符的字符串匹配


   [ ]  与特定范围(例如,[a-f])或特定集(例如,[abcdef])中的任意单字符匹配。 


  [^]  与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。

 

  例子:

 

  • WHERE FirstName LIKE '_im' 可以找到所有三个字母的、以 im 结尾的名字(例如,Jim、Tim)。  


  • WHERE LastName LIKE '%stein' 可以找到姓以 stein 结尾的所有员工。  


  • WHERE LastName LIKE '%stein%' 可以找到姓中任意位置包括 stein 的所有员工。 


   • WHERE FirstName LIKE '[JT]im' 可以找到三个字母的、以 im 结尾并以 J 或 T 开始的名字(即仅有Jim 和Tim) 


  • WHERE LastName LIKE 'm[^c]%' 可以找到以 m 开始的、后面的(第二个)字母不为 c 的所有姓。

 

 

     2.   ESCAPE   'escape_character'  

 

   
      允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character   是放在通配符前表示此特殊用途的字 

 

符。   
     

SELECT *

   FROM finances

   WHERE description LIKE 'g!_' ESCAPE '!' GO  

      
 

意思就是:    

       

      比如,我们要搜索一个字符串 "g_"  ,如果直接  like "g_",那么   "_"的作用就是通配符,而不是字符,结果,我们

 

会查到比如  "ga","gb","gc",而不是我们需要的   "g_".    

       

       用  LIKE   'g!_'   ESCAPE   '!'     '!'表示特殊用法标志,注意!可以被任意字符替代,只是不能是系统中允许出现的 

 

字符,否则又要转义了……  

 

 

     3.   replace 该派上用场了

 

 

    其实看着 ESCAPE  用法感觉还是很不爽,至少对我现在的需求如此。为什么不能直接转移  _  %  等字符么,非要 

 

ESCAPE  一下 _   %  的前一个字符!因为我根本不知道用户输入的查询条件中  _  %  前一个字符是什么,所以必须要  

 

replace 一下  T_T

 

SELECT t.*, t.ROWID 
FROM table1 t 
WHERE t.col1 LIKE REPLACE(lower(#col1#), '%', '\%')) || '%' ESCAPE '\'; 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值