34,590
社区成员
发帖
与我相关
我的任务
分享
将百分号%当作普通字符的查询
使用 ESCAPE 子句的模式匹配
可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为 comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,请指定 WHERE comment LIKE '%30!%%' ESCAPE '!' 之类的 WHERE 子句。如果未指定 ESCAPE 和转义符,则数据库引擎 将返回包含字符串 30 的所有行。
如果 LIKE 模式中的转义符后面没有字符,则该模式无效并且 LIKE 返回 FALSE。如果转义符后面的字符不是通配符,则将放弃转义符并将该转义符后面的字符作为该模式中的常规字符处理。这包括百分号 (%)、下划线 (_) 和左括号 ([) 通配符(如果它们包含在双括号 ([ ]) 中)。另外,在双括号字符 ([]) 内,可以使用转义符并将插入符号 (^)、连字符 () 和右括号 (]) 转义。
create table tb(col varchar(20))
insert into tb values('aaaaa')
insert into tb values('aa%_aaa')
go
select * from tb where col LIKE '%!%_%' ESCAPE '!'
drop table tb
/*
col
--------------------
aa%_aaa
(所影响的行数为 1 行)
*/
--如果需要位置,直接charindex即可.
create table tb(col varchar(20))
insert into tb values('aaaaa')
insert into tb values('aa%_aaa')
go
select 位置 = charindex('%_' , col) from tb
drop table tb
/*
位置
-----------
0
3
(所影响的行数为 2 行)
*/