SQL Server LIKE包含括号字符

时间:2010-09-07 17:34:00

标签: sql sql-server pattern-matching

使用SQL Server 2008.我有一个包含以下列的表:

sampleData (nvarchar(max))

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

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

我正在尝试编写一个简单的查询,只需检测左括号,就会返回列表格式为这样的列的所有行。

SELECT * from sampleTable where sampleData like '[%'

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

感谢您的任何建议!

3 个答案:

答案 0 :(得分:71)

 ... like '[[]%'

您使用[ ]围绕特殊字符(或范围)

请参阅SQL Server LIKE

中的“将通配符用作文字”一节

编辑,2011年11月24日

注意:您无需转义结束括号......

答案 1 :(得分:27)

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

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

有关详细信息,请参阅documentation

答案 2 :(得分:3)

这里再说一遍...... 如果要在一组字符中包含括号(或其他特殊符号),则只能选择使用ESCAPE(因为您已使用括号表示该组)。 你还必须指定ESCAPE子句,因为没有默认的转义字符(默认情况下它不是反斜杠,因为我首先想到的是来自C背景)。

e.g。如果我想拉出一列,其中一列包含一组“可接受的”字符之外的任何内容,为了论证,让我们说字母数字...我们可以从这个开始

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

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

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

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

使用反斜杠在前面(单独)括号并指示我们对转义字符使用反斜杠允许我们在指示字符集的功能括号内转义它们。

抱歉这个愚蠢的例子,但希望它可以帮助某人