IMM*_*TAL 102 sql sql-server
我用以下LIKE
条件编写了以下SQL查询:
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
Run Code Online (Sandbox Code Playgroud)
在LIKE
我想要搜索任何下划线%_%
,但我知道我的列的数据没有下划线字符.
样本数据:
create table Manager(
id int
,managerid varchar(3)
,managername varchar(50)
);
insert into Manager(id,managerid,managername)values(1,'A1','Mangesh');
insert into Manager(id,managerid,managername)values(2,'A2','Sagar');
insert into Manager(id,managerid,managername)values(3,'C3','Ahmad');
insert into Manager(id,managerid,managername)values(4,'A4','Mango');
insert into Manager(id,managerid,managername)values(5,'B5','Sandesh');
Run Code Online (Sandbox Code Playgroud)
Rac*_*cha 168
WHERE
像这样修改你的条件:
WHERE mycolumn LIKE '%\_%' ESCAPE '\'
Run Code Online (Sandbox Code Playgroud)
这是Oracle支持转义字符的方法之一.在这里,您可以使用escape
关键字定义转义字符.有关详细信息,请参阅Oracle Docs上的此链接.
这是'_'
和SQL '%'
中的LIKE
操作语句中的通配符.
的_
字符查找(任何)一个单个字符的存在.如果你搜索的columnName LIKE '_abc'
,它会给你有行的结果'aabc'
,'xabc'
,'1abc'
,'#abc'
但不是'abc'
,'abcc'
,'xabcd'
等等.
该'%'
字符用于匹配0个或更多个字符.这意味着,如果你搜索的columnName LIKE '%abc'
,它会给你有导致'abc'
,'aabc'
,'xyzabc'
等等,但是没有'xyzabcd'
,'xabcdd'
和其他任何字符串,不是结束'abc'
.
在你的情况下,你搜索过'%_%'
.这将为该列提供具有一个或多个字符的所有行,这意味着任何字符作为其值.这就是为什么即使_
列值中没有行也要获取所有行.
Tim*_*ter 78
下划线是查询一个任意字符的通配符LIKE
.
因此LIKE %_%
意味着"在本栏中给我所有记录至少有一个任意字符".
您必须在sql-server中使用[]
around 转义通配符:
SELECT m.*
FROM Manager m
WHERE m.managerid LIKE '[_]%'
AND m.managername LIKE '%[_]%'
Run Code Online (Sandbox Code Playgroud)
由于你想专门搜索通配符,你需要逃避它
这是通过ESCAPE
在LIKE
表达式中添加子句来完成的.使用该ESCAPE
子句指定的字符将使以下通配符"无效".
你可以使用你喜欢的任何角色(只是不是通配符).大多数人使用a,\
因为这是许多编程语言也使用的
所以你的查询会导致:
select *
from Manager
where managerid LIKE '\_%' escape '\'
and managername like '%\_%' escape '\';
Run Code Online (Sandbox Code Playgroud)
但你也可以使用任何其他角色:
select *
from Manager
where managerid LIKE '#_%' escape '#'
and managername like '%#_%' escape '#';
Run Code Online (Sandbox Code Playgroud)
这是一个SQLFiddle示例:http://sqlfiddle.com/#!6/63e88/4
归档时间: |
|
查看次数: |
145373 次 |
最近记录: |