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]' + '%'
答案 0 :(得分:6)
您需要转义[]
:
select * from zSyn
where xField like ('%' + 'DEVCON 5 Minute Epoxy amber ![1:1!]' + '%') ESCAPE '!';
答案 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%')