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括号内将它们转义出来。
对不起,这个愚蠢的例子,但希望它可以帮助别人