需要询问SQL Server 2005的奇怪行为。
我需要的是在我的专栏中找到包含']'或'['的记录
我在这个列中有数据
'6b51c65b-5773-415a-aec9-8482c404faef_megas_xlr[1].jpg'
当我运行此查询时
select * from Theme where BackgroundImageUrl like '%[%'
然后没有记录,但运行以下查询
select * from Theme where BackgroundImageUrl like '%]%'
跟随输出
'6b51c65b-5773-415a-aec9-8482c404faef_megas_xlr[1].jpg'
该查询有什么问题?为了搜索具有结束或开始括号[]
的记录,我需要做什么?
EDIT ..
有关更多说明,请参阅我的测试数据。 A [1] .JPG B [1.JPG C1] .JPG
以下是我在运行以下组合后获得的结果
A select BackgroundImageUrl from Theme where BackgroundImageUrl like '%[%'
没有结果
B select BackgroundImageUrl from Theme where BackgroundImageUrl like '%]%'
A [1] .JPG C1] .JPG
C select BackgroundImageUrl from Theme where BackgroundImageUrl like '%[ [ ]%'
A [1] .JPG B [1.JPG
D select BackgroundImageUrl from Theme where BackgroundImageUrl like '%[ ] ]%'
没有结果
我需要的是, 案例1:我需要包含'['
的所有记录案例2:我需要包含']'
的所有记录查询C符合我的案例1,但我无法获得案例2的结果
答案 0 :(得分:3)
[]是外卡搜索的明确部分:
通配符描述示例
的%强>
任何零个或多个字符的字符串。
标题LIKE'%computer%'在书名的任何地方找到所有带有'computer'一词的书名。
_ (下划线) 任何一个角色。 WHERE au_fname LIKE'_ean'找到以ean结尾的所有四个字母的名字(Dean,Sean等)。
[] 指定范围内的任何单个字符([a-f])或set([abcdef])。 WHERE au_lname LIKE'[C-P] arsen'找到以arsen结尾的作者姓氏,并以C和P之间的任何单个字符开头,例如Carsen,Larsen,Karsen等。在范围搜索中,范围中包含的字符可能会根据排序规则的排序规则而有所不同。
<强> [^] 强> 任何不在指定范围内的单个字符([^ a-f])或set([^ abcdef])。 WHERE au_lname LIKE'de [^ l]%'所有作者姓氏以de开头,后面的字母不是l。
您需要应用一个转义子句让SQL Server评估[]作为您要搜索的内容:
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
* * ESCAPE_CHARACTER
是一个放在通配符前面的字符,表示通配符应该被解释为常规字符而不是通配符。 escape_character是一个没有默认值的字符表达式,必须只计算一个字符。
或者您可以使用: 将通配符用作文字 您可以使用通配符模式匹配字符作为文字字符。要将通配符用作文字字符,请将通配符括在括号中。下表显示了使用LIKE关键字和[]通配符的几个示例。
Symbol Meaning
--------------- --------------------
LIKE '5[%]' 5%
LIKE '[_]n' _n
LIKE '[a-cdf]' a, b, c, d, or f
LIKE '[-acdf]' -, a, c, d, or f
LIKE '[ [ ]' [
LIKE ']' ]
LIKE 'abc[_]d%' abc_d and abc_de
LIKE 'abc[def]' abcd, abce, and abcf
答案 1 :(得分:2)
我刚刚发现了答案。
select * from Theme where BackgroundImageUrl like '%\]%' ESCAPE '\'
和
select * from Theme where BackgroundImageUrl like '%\[%' ESCAPE '\'
答案 2 :(得分:0)
[]
用于标识LIKE子句中的范围。
上面链接的文档有以下解决方案:
将通配符用作文字
您可以使用通配符模式匹配字符作为文字 字符。要将通配符用作文字字符, 将通配符括在括号中。下表显示 使用LIKE关键字和[]通配符的几个示例 字符。
Symbol | Meaning
LIKE '[ [ ]' | [
LIKE ']' | ]
您的查询必须如下所示:
select * from Theme where BackgroundImageUrl like '%[ [ ]%'
修改:假设您只想要具有[或者]但不是两者的文件:
select * from Theme where (BackgroundImageURL like '%]%' AND BackgroundImageURL not like '%[[]%') or (BackgroundImageURL like '%[[]%' AND BackgroundImageURL not like '%]%')
答案 3 :(得分:0)
从这里开始:http://msdn.microsoft.com/en-us/library/ms179859.aspx
获取包含[或]的行。
declare @T table (S varchar(100))
insert into @T values ('A[1].jpg')
insert into @T values ('B[1.jpg')
insert into @T values ('C1].jpg')
select *
from @T
where S like '%[[]%' or
S like '%]%'
结果;
S
---------
A[1].jpg
B[1.jpg
C1].jpg
答案 4 :(得分:0)
你必须逃离开场括号:
LIKE '%[[]%
但是你不必逃避结束那个(如你所说)
剩下的“有时”逻辑取决于你。或者一个新的完整的问题。我们已经回答了这个问题。