sql 通配符

本文详细介绍了 SQL 中 Like 语句的使用方法,包括通配符的特殊用法,如何正确处理特殊字符,以及如何使用 Escape 子句来定义转义符。通过实例演示了如何针对不同情况选择合适的匹配模式。

通配符 '_'  和'%' 分别匹配单个字符和多个字符

select * from sysibm.systables where name like 'Ra_%' escape 'a'

查询结果为R_ 开头的

注意:like 条件含有通配符时,需要使用escape



1,SQL like对时间查询的处理方法

SQL数据表中有savetime(smalldatetime类型)字段,表中有两条记录,savetime值为:2005-3-8 12:12:00和2005-6-6 14:02:02 

我用下面语句什么也搜不出来 
select * from soft where soft.savetime like'%2005-3-8%' 

SQL帮助中说: 
"当搜索 datetime 值时,推荐使用 LIKE,因为 datetime 项可能包含各种日期部分。例如,如果将值 19981231 9:20 插入到名为 arrival_time 的列中,则子句 WHERE arrival_time = 9:20 将无法找到 9:20 字符串的精确匹配,因为 SQL Server 将其转换为 1900 年 1 月 1 日上午 9:20。然而,子句 WHERE arrival_time LIKE '%9:20%' 将找到匹配。" 

后运行下面语句SELECT soft.*, CAST(soft.savetime AS varchar(20)) AS strdatetime, 
发现 
SQL把smalldatetime格试转成: 
03 8 2005 12:12PM 

我何用 like'%2005-3-8%'搜索到2005年3月8日所有的记录?

select * 
from soft 
where datediff(d,soft.savetime,convert(datetime,'20050308',121))=0 

---- 
select * 
from soft 
where convert(char(10),soft.savetime,121)='20050308'

2, SQL对like 操作中的特殊字符处理方法:

SQL Server查询过程中,单引号 ' 是特殊字符,所以在查询的时候要转换成双单引号 '' 。

在like操作还有以下特殊字符:下划线_,百分号%,方括号[],尖号^。

其用途如下:

下划线:用于代替一个任意字符(相当于正则表达式中的 ? )

百分号:用于代替任意数目的任意字符(相当于正则表达式中的 * )

方括号:用于转义(事实上只有左方括号用于转义,右方括号使用最近优先原则匹配最近的左方括号)

尖号:用于排除一些字符进行匹配(这个与正则表达式中的一样)

以下是一些匹配的举例,需要说明的是,只有like操作才有这些特殊字符,=操作是没有的。

a_b...        a[_]b%

a%b...       a[%]b%

a[b...       a[[]b%

a]b...       a]b%

a[]b...      a[[]]b%

a[^]b...     a[[][^]]b%

a[^^]b...    a[[][^][^]]b%

在实际进行处理的时候,对于=操作,我们一般只需要如此替换:

' -> ''

对于like操作,需要进行以下替换(注意顺序也很重要)

[ -> [[]     (这个必须是第一个替换的!!)

% -> [%]    (这里%是指希望匹配的字符本身包括的%而不是专门用于匹配的通配符)

_ -> [_]

^ -> [^]

3,SQL Like 通配符特殊用法:Escape


阐述Escape 的作用:

1.使用   ESCAPE   关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串   5%   的字符串,请使用:    
WHERE   ColumnA   LIKE   '%5/%%'   ESCAPE   '/' 
但是在mysql中好像不能使用"\"。
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 '\'



<think>好的,我现在要帮用户解决关于SQL通配符的用法问题。用户希望了解使用方法及示例,并且系统提示需要引用已有的资料。首先,我需要回忆一下SQL中的通配符有哪些,常见的包括百分号%、下划线_、方括号[]等。 根据提供的引用内容,引用[1]和[2]介绍了通配符的基本概念和用途,可以用来匹配一系列值。引用[3]提到了一些注意事项,比如性能影响和转义符的使用,而引用[4]则给出了一些具体的示例,比如使用方括号匹配特定字符范围。 接下来,我需要把这些信息组织成结构清晰的回答。首先应该定义通配符,然后逐个介绍每个通配符的用法,并给出示例。同时,注意事项部分需要包含性能问题和转义方法,这部分引用[3]的内容很重要,用户可能在写查询时遇到索引失效的情况,需要提醒他们。 还要检查是否有遗漏的通配符或者用法,比如是否有其他通配符SQL的不同版本中存在差异。比如,在SQL Server中可能支持方括号,而其他数据库如MySQL可能使用不同的语法,但用户的问题没有指定具体数据库,所以可能需要一般性的回答,或者指出可能存在差异。 另外,示例部分需要确保正确性。例如,引用[4]中的例子可能需要验证,比如LIKE '5[%]'应该是匹配'5%'的情况,而使用ESCAPE子句的例子在引用[3]中也有提到。需要确保示例和解释对应,避免混淆。 用户可能需要实际应用的例子,比如搜索姓名以某个字母开头,或者包含特定字符的情况。因此,每个通配符的示例应该覆盖不同的使用场景,如开头匹配、中间匹配、单个字符匹配等。 还需要注意,回答中引用的部分要正确标注来源,比如在注意事项部分末尾添加[^3],在示例部分添加对应的引用[^4]等。同时,生成的相关问题需要与主题相关,帮助用户深入理解,比如性能优化、转义方法的具体使用等。 最后,确保语言口语化,避免过于技术化的术语,让用户容易理解。可能需要检查是否有术语需要进一步解释,比如“索引失效”是什么意思,但考虑到用户可能有一定基础,可以适当简化。 总结步骤: 1. 介绍通配符的定义和作用,引用[1][2]。 2. 分点讲解每个通配符的用法和示例,引用[4]。 3. 注意事项部分,引用[3]。 4. 生成相关问题,引导用户深入。 5. 确保引用正确,格式符合要求,使用中文回答。</think>### SQL通配符使用方法及示例 #### 1. 通配符的定义与作用 SQL通配符是用于模糊匹配文本的特殊字符,结合`LIKE`运算符可实现灵活查询。适用于过滤包含特定模式的数据,例如部分匹配的字符串[^1][^2]。 --- #### 2. 常用通配符及用法 ##### (1) 百分号 `%` - **功能**匹配任意长度(0或多个)的字符序列。 - **示例**: ```sql -- 查询以"S"开头的姓名 SELECT * FROM Customers WHERE Name LIKE 'S%'; -- 查询包含"com"的邮箱 SELECT * FROM Users WHERE Email LIKE '%com%'; ``` ##### (2) 下划线 `_` - **功能**匹配单个任意字符。 - **示例**: ```sql -- 查询第二个字符为"a"的姓名(如"Sam") SELECT * FROM Customers WHERE Name LIKE '_a%'; ``` ##### (3) 方括号 `[ ]` - **功能**匹配指定范围内的单个字符。 - `[abc]`:匹配a、b、c中的任意一个字符。 - `[a-z]`:匹配小写字母a到z。 - `[^abc]`:匹配****a、b、c的字符。 - **示例**: ```sql -- 查询姓名以A、B或C开头 SELECT * FROM Customers WHERE Name LIKE '[ABC]%'; -- 查询姓名第二个字符不是数字 SELECT * FROM Users WHERE Name LIKE '_\[^0-9]%' ESCAPE '\'; [^4] ``` ##### (4) 转义通配符 - **场景**:若需匹配通配符本身(如`%`或`_`),需使用`ESCAPE`子句。 - **示例**: ```sql -- 查找包含"20%"的字段 SELECT * FROM Products WHERE Description LIKE '%20!%%' ESCAPE '!'; [^3] ``` --- #### 3. 注意事项 1. **性能影响**:以`%`或`_`开头的模式可能导致索引失效,降低查询效率[^3]。 2. **大小写敏感**:部分数据库(如MySQL)区分大小写,需注意配置。 3. **转义字符选择**:可使用任意字符作为转义符,需通过`ESCAPE`声明。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值