157

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');

Sql-Fiddle

4

6 回答 6

237

像这样修改你的WHERE条件:

WHERE mycolumn LIKE '%\_%' ESCAPE '\'

这是 Oracle 支持转义字符的方式之一。escape在这里,您使用关键字定义转义字符。有关详细信息,请参阅Oracle Docs 上的此链接

'_'and是SQL 中操作语句中的'%'通配符。LIKE

_角色寻找(任何)单个角色的存在。如果您按 搜索columnName LIKE '_abc',它将为您提供包含'aabc', 'xabc', '1abc','#abc'但 NOT 'abc','abcc'等行的结果'xabcd'

'%'字符用于匹配 0 个或多个字符。这意味着,如果您按 搜索columnName LIKE '%abc',它将为您提供具有'abc''aabc''xyzabc'的结果,但没有'xyzabcd''xabcdd'以及任何其他不以 结尾的字符串'abc'

在您的情况下,您已搜索'%_%'. 这将赋予该列具有一个或多个字符(即任何字符)的所有行作为其值。这就是为什么即使_您的列值中没有任何行,您也会获得所有行。

于 2013-10-25T11:27:58.113 回答
113

下划线是查询中任意字符的通配符。LIKE

因此LIKE %_%,意思是“给我在这一列中至少有一个任意字符的所有记录”。

您必须在 sql-server 中转义通配符[]

SELECT m.* 
FROM Manager m 
WHERE m.managerid    LIKE  '[_]%'
AND   m.managername  LIKE '%[_]%'

请参阅:LIKE (Transact-SQL)

Demo

于 2013-10-25T11:36:42.427 回答
9

当您想专门搜索通配符时,您需要转义它

这是通过将ESCAPE子句添加到您的LIKE表达式来完成的。用该ESCAPE子句指定的字符将使后面的通配符“无效”。

您可以使用任何您喜欢的字符(只是不能使用通配符)。大多数人使用 a\因为这是许多编程语言也使用的

因此,您的查询将导致:

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

于 2013-10-25T12:03:35.900 回答
5

下划线是通配符。例如,'A_%' 将查找以'A'开头的所有匹配项,并且之后至少有 1 个额外字符

于 2013-10-25T11:34:47.177 回答
1

如果人们在 BigQuery 中搜索如何执行此操作:

  • 下划线“_”匹配单个字符或字节。

  • 您可以使用两个反斜杠转义“\”、“_”或“%”。例如, ”\%”。如果您使用的是原始字符串,则只需要一个反斜杠。例如,r"\%"。

WHERE mycolumn LIKE '%\\_%'

来源:https ://cloud.google.com/bigquery/docs/reference/standard-sql/operators

于 2020-06-15T21:41:18.193 回答
0

您可以编写如下查询:

SELECT * FROM Manager
WHERE managerid LIKE '\_%' escape '\'
AND managername LIKE '%\_%' escape '\';

它会解决你的问题。

于 2020-06-01T12:24:47.017 回答