SQL Server LIKE包含括号字符

使用SQL Server 2008.我有一个表格,具有以下列:

sampleData (nvarchar(max)) 

其中一些行中的此列的值是格式如下的列表:

 ["value1","value2","value3"] 

我试图写一个简单的查询,将返回所有行与列表格式化,只要检测到左括号。

 SELECT * from sampleTable where sampleData like '[%' 

上面的查询不起作用,因为'['是一个特殊的字符,我不能为我的生活弄清楚如何转义括号,所以我的查询做我想要的。

感谢您的任何build议!

  ... like '[[]%' 

您可以使用[ ]来包围特殊字符(或范围)

请参阅SQL Server LIKE中的 “在通配符中使用通配符”一节

编辑,2011年11月24日

注意:您不需要转义右括号

除了gbn的回答,另一种方法是使用ESCAPE选项:

 SELECT * from sampleTable where sampleData like '\[%' ESCAPE '\' 

详细信息请参阅文档

这里还有一个注意事项…如果你想在一组字符中包含括号(或其他特殊字符),你只能select使用ESCAPE(因为你已经在使用方括号来表示该组)。 你也必须指定ESCAPE子句,因为没有默认的转义字符(默认情况下它不是反斜线,因为我第一次想到,来自C背景)。

例如,如果我想拉出列中包含任何“可接受”字符之外的行的行,为了说明起见,我们可以说是字母数字…我们可以从这开始

 SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9]%' 

所以我们要返回任何不在列表中的任何字符(由于前导字符^字符)。

如果我们想在这组可接受的字符中添加特殊字符,我们不能嵌套括号,所以我们必须使用一个转义字符,像这样…

 SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9\[\]]%' ESCAPE '\' 

在括号(单独)前面加一个反斜杠,表示我们使用反斜杠作为转义字符,这样我们就可以在表示字符集的function括号内将它们转义出来。

对不起,这个愚蠢的例子,但希望它可以帮助别人