SQL带=的语句在哪里工作,但LIKE不能

时间:2019-07-07 15:30:14

标签: sql sql-server

SQL where =语句有效,但LIKE无效 有解决办法吗?

这是确切的代码:

create table zSyn (xField nvarchar(255));
insert into zSyn(xField)
select 'DEVCON 5 Minute Epoxy amber [1:1]';

--Works and returns 1 row:
select * from zSyn
where xField = 'DEVCON 5 Minute Epoxy amber [1:1]';

--Does NOT return any rows:
select * from zSyn
where xField like '%' + 'DEVCON 5 Minute Epoxy amber [1:1]' + '%'

4 个答案:

答案 0 :(得分:6)

您需要转义[]

select * from zSyn
where xField like ('%' + 'DEVCON 5 Minute Epoxy amber ![1:1!]' + '%') ESCAPE '!';

db<>fiddle demo

答案 1 :(得分:1)

问题在于方括号表示SQL Server like中的字符类。一种方法是使用escape。这是另外两个选项:

xField like '%' + 'DEVCON 5 Minute Epoxy amber [[]1:1]' + '%'
xField like '%' + 'DEVCON 5 Minute Epoxy amber _1:1_' + '%'

第二个字符将匹配任何字符,包括方括号。出于您的目的,这可能还可以。

答案 2 :(得分:0)

如果要避免转义字符串的另一种选择是使用charindex()

示例

Select * 
 From  zSyn
 Where charindex('DEVCON 5 Minute Epoxy amber [1:1]',xField)>0

答案 3 :(得分:0)

可能是因为方括号与LIKE混淆,因为有时您可以使用方括号来查找数字或字母字符,例如LIKE([A-Z])

SELECT * FROM zSyn WHERE xField LIKE ('%DEVCON 5 Minute Epoxy amber %1:1%')