首页 > 数据库 >SQL转义字符和通配符

SQL转义字符和通配符

时间:2023-11-09 12:37:35浏览次数:36  
标签:like 通配符 escape ABCDE 转义字符 SQL where select

1.使用   ESCAPE   关键字,定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串   5%   的字符串,请使用:    
  WHERE   ColumnA   LIKE   '%5/%%'   ESCAPE   '/'  
2.ESCAPE   'escape_character'    
  允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character   是放在通配符前表示此特殊用途的字符。  
   
  SELECT   *  
  FROM   finances  
  WHERE   description   LIKE   'gs_'   ESCAPE   'S'  
  GO  
   
  意思就是:  
  比如,我们要搜索一个字符串     "g_"     ,如果直接     like     "g_",那么   "_"的作用就是通配符,而不是字符,结果,我们会查到比如     "ga","gb","gc",而不是我们需要的   "g_".  
  用     LIKE   'gs_'   ESCAPE   'S'     's'表示特殊用法标志  
3.create   table   a   (name   varchar(10))  
  go  
  insert   into   a   select   '11%22'  
  union   all   select   '11%33'  
  union   all   select   '12%33'  
  go  
  select   *   from   a     WHERE   name   LIKE   '%/%33'   ESCAPE   '/'   --指定用'/'符号来说明跟在其后面的通配符字符为普能字符。(第二个%是字符不是通配符来的)  
  go  
  drop   table   a
结果为:  
  name                
  ----------    
  11%33  
  12%33


 

%:匹配零个及多个任意字符; _:与任意单字符匹配; []:匹配一个范围; [^]:排除一个范围

Symbol

Meaning

like '5[%]'

5%

like '[_]n'

_n

like '[a-cdf]'

a, b, c, d, or f

like '[-acdf]'

-, a, c, d, or f

like '[[]'

[

like ']'

]

like 'abc[_]d%'

abc_d and abc_de

like 'abc[def]'

abcd, abce, and abcf

like '[^1-9]'

0

like '[^1-9b-z]'

0, a

对于字符串中出现的特殊字符:'%','[','[]', '_' 可以使用 '[]' 把它们包含起来, 这样在匹配模式(pattern)中,它们就被当作普通字符对待了。

1. 用 like '[[]' 匹配特殊字符 '['

select 1 where '[ABCDE' like '[[]%'

2. 用 like ']' 匹配特殊字符 ']'

select 1 where ']ABCDE' like ']%'

3. 用 like '[[]]' 匹配特殊字符 '[]'

select 1 where '[]ABCDE' like '[[]]%%'

4. 用 like '[_]' 匹配特殊字符 '_'

select 1 where '_ABCDE' like '[_]%'

5. 用 like '[%]' 匹配特殊字符 '%'

select 1 where 'ABC%DE' like 'ABC[%]DE'

对于其他的特殊字符:'^', '-', ']' 因为它们本身在包含在 '[]' 中使用,所以需要用另外的方式来转义,于是就引入了 like 中的 escape 子句,另外值得注意的是:escape 可以转义所有的特殊字符。

select 1 where '^ABCDE' like '!^ABCDE' escape '!' select 1 where '-ABCDE' like '!-ABCDE' escape '!' select 1 where ']ABCDE' like '!]ABCDE' escape '!'  select 1 where '%ABCDE' like '\%ABCDE' escape '\' select 1 where '%ABCDE' like '!%ABCDE' escape '!' select 1 where '%ABCDE' like '#%ABCDE' escape '#' select 1 where '%ABCDE' like '@%ABCDE' escape '@'  select 1 where '[ABCDE' like '![ABCDE' escape '!' select 1 where ']ABCDE' like '!]ABCDE' escape '!'

看出规律了吧,就是用 escape 后面紧跟着的字符来做转义字符。 escape 后面的字符相当于 C 语言字符串中的转义字符 '\'。

最后,看一个更加复杂的匹配

select 1 where '[^A-Z]ABCDE' like '\[\^A\-Z\]%' escape '\'

标签:like,通配符,escape,ABCDE,转义字符,SQL,where,select
From: https://blog.51cto.com/u_14682436/8275883

相关文章

  • 格式化SQL代码语句 format t-sql
      http://www.red-gate.com/products/SQL_Refactor/index.htmhttp://orafaq.com/utilities/sqlformatter.htmhttp://mikeschinkel.com/blog/anyoneknowofatsqlcodeformatter/http://software.topcoder.com/catalog/c_component.jsp?comp=10029208&ver=1http://www.red-gat......
  • SQL Server 2000 数据类型
    数据类型在Microsoft®SQLServer™中,每个列、局部变量、表达式和参数都有一个相关的数据类型,这是指定对象可持有的数据类型(整型、字符、money等等)的特性。SQLServer提供系统数据类型集,定义了可与SQLServer一起使用的所有数据类型。下面列出系统提供的数据类型集。可以定......
  • SQL Server Hosting Toolkit
    TheDatabasePublishingWizardenablesthedeploymentofSQLServer2005databases(bothschemaanddata)intoasharedhostingenvironmentoneitheraSQLServer2000or2005server.Thetoolsupportstwomodesofdeployment:ItgeneratesasingleSQLsc......
  • Python中使用sqlalchemy操作数据库遇到密码包含@的处理方法
    欺骗性的oracle12514错误,这就有问题了,努力方向就不对了。。。密码包含@的处理方法使用sqlalchemy操作数据库的时候,遇到密码中包含@的时候会报错。因为它是通过@来链接IP地址的,遇到密码里有@就跟语法里的@混乱分不清了。编辑器就会报错。比如下面这个例子:用户名:XXXXX密码:1......
  • Java数据类型和MySql数据类型对应表
    javamysql数据类型对照类型名称显示长度数据库类型JAVA类型JDBC类型索引(int)描述      VARCHARL+NVARCHARjava.lang.String12 CHARNCHARjava.lang.String1 BLOBL+NBLOBjava.lang.byte[]-4 TEXT65535VARCHARjava.lang.String-1       INTEGER4IN......
  • MySQL 学习笔记--引擎
    在缺省情况下,MySQL支持三个引擎:ISAM、MyISAM和HEAP。另外两种类型InnoDB和Berkley(BDB),也常常可以使用。ISAMISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存......
  • MySQL 学习笔记--架构
    1、MySQL服务器逻辑架构图:第一层:该服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有的类似的架构。比如连接处理、授权认证、安全等等。第二层:MySQL的核心服务功能,包括查询解析、分析、优化、缓存以及所有的内置函数(日期、时间、加密),所有跨存引擎的功能都......
  • sql 根据身份证号获取出生日期并转成对应格式
     sqlserver 查询判断身份证号是18位的selectSUBSTRING(SUBSTRING(IDCard,7,8),1,4)+'-'+SUBSTRING(SUBSTRING(IDCard,7,8),5,2)+'-'+SUBSTRING(SUBSTRING(IDCard,7,8),7,2)from表whereBirthdayisnullandLEN(IDCard)=18 修改update表setBirth......
  • 最佳实践for Postgresql-Linux
    适用范围postgresqlonlinuxLinux内核提供了各种可能影响性能的配置选项,为了获得最佳性能,PostgreSQL数据库取决于正确定义的操作系统参数。操作系统内核参数配置不当可能会导致数据库服务器性能下降与系统稳定。因此,必须根据数据库服务器及其工作负载配置这些参数。就像任何其他......
  • mysql获取插入后ID
    1.selectmax(id)fromtablename在MySQL中,使用auto_increment类型的id字段作为表的主键。通常的做法,是通过“selectmax(id)fromtablename”的做法,但是显然这种做法需要考虑并发的情况,需要在事务中对主表以“X锁“,待获得max(id)的值以后,再解锁。 2.SELECTLAST_INSERT_ID......