我使用
LIKE
条件编写了以下 SQL 查询:
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
在
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');
像这样修改您的
WHERE
条件:
WHERE mycolumn LIKE '%\_%' ESCAPE '\'
这是Oracle支持转义字符的方式之一。在这里,您使用
escape
关键字定义转义字符。有关详细信息,请参阅Oracle 文档上的此链接。
'_'
和'%'
是SQL中LIKE
操作语句中的通配符。
_
字符会查找(任何)单个字符的存在。如果您按 columnName LIKE '_abc'
搜索,它将为您提供包含 'aabc'
、'xabc'
、'1abc'
、'#abc'
,但不包含 'abc'
、'abcc'
、'xabcd'
等行的结果。
'%'
字符用于匹配0个或多个字符。这意味着,如果您按 columnName LIKE '%abc'
搜索,它会给您的结果有 'abc'
、'aabc'
、'xyzabc'
等,但没有 'xyzabcd'
、'xabcdd'
和任何其他不结尾的字符串与 'abc'
。
在您的情况下,您已通过
'%_%'
进行搜索。这将为该列的所有行提供一个或多个字符(即任何字符)作为其值。这就是为什么即使列值中没有 _
,您仍会获取所有行。
下划线是 LIKE
因此
LIKE %_%
的意思是“给我此列中至少包含一个任意字符的所有记录”。
您必须在 sql-server 中使用
[]
来转义通配符:
SELECT m.*
FROM Manager m
WHERE m.managerid LIKE '[_]%'
AND m.managername LIKE '%[_]%'
当您想专门搜索通配符时,您需要转义它
这是通过将
ESCAPE
子句添加到 LIKE
表达式中来完成的。使用 ESCAPE
子句指定的字符将使后面的通配符“无效”。
您可以使用任何您喜欢的字符(但不能是通配符)。大多数人使用
\
因为这是许多编程语言也使用的
因此您的查询将导致:
select *
from Manager
where managerid LIKE '\_%' escape '\'
and managername like '%\_%' escape '\';
但是您也可以使用任何其他角色:
select *
from Manager
where managerid LIKE '#_%' escape '#'
and managername like '%#_%' escape '#';
这是一个 SQLFiddle 示例:http://sqlfiddle.com/#!6/63e88/4
下划线是某事物的通配符。 例如 'A_%' 将查找以 'A' 开头的所有匹配项,并且之后至少有 1 个额外字符
如果人们正在搜索如何在 BigQuery 中执行此操作:
下划线“_”匹配单个字符或字节。
您可以使用两个反斜杠转义“\”、“_”或“%”。例如, ”\%”。如果您使用原始字符串,则只需要一个反斜杠。例如,r"\%"。
WHERE mycolumn LIKE '%\\_%'
来源:https://cloud.google.com/bigquery/docs/reference/standard-sql/operators
您可以编写如下查询:
SELECT * FROM Manager
WHERE managerid LIKE '\_%' escape '\'
AND managername LIKE '%\_%' escape '\';
它会解决你的问题。