包含括号字符的 SQL Server LIKE
Posted
技术标签:
【中文标题】包含括号字符的 SQL Server LIKE【英文标题】:SQL Server LIKE containing bracket characters 【发布时间】:2011-04-09 08:02:25 【问题描述】:使用 SQL Server 2008。我有一个包含以下列的表:
sampleData (nvarchar(max))
其中一些行中该列的值是格式如下的列表:
["value1","value2","value3"]
我正在尝试编写一个简单的查询,该查询将通过仅检测左括号来返回所有具有这种格式列表的行。
SELECT * from sampleTable where sampleData like '[%'
上面的查询不起作用,因为 '[' 是一个特殊字符,我一生都无法弄清楚如何转义括号,所以我的查询做我想要的。
感谢您的任何建议!
【问题讨论】:
【参考方案1】:这里只是进一步说明... 如果您想在一组字符中包含方括号(或其他特殊字符),您只能选择使用 ESCAPE(因为您已经使用方括号来指示该组)。 此外,您必须指定 ESCAPE 子句,因为没有默认转义字符(默认情况下它不是反斜杠,因为我首先想到的是来自 C 背景)。
例如如果我想提取列包含一组“可接受”字符之外的任何内容的行,为了论证,我们可以说字母数字......我们可以从这个开始
SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9]%'
所以我们返回的任何字符不在列表中(由于前导插入符号 ^ 字符)。
如果我们想在这组可接受的字符中添加特殊字符,我们不能嵌套括号,所以我们必须使用转义字符,像这样......
SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9\[\]]%' ESCAPE '\'
在括号(单独)前面加上一个反斜杠并表示我们正在使用反斜杠作为转义字符,这允许我们在指示字符集的有效括号内对它们进行转义。
抱歉这个愚蠢的例子,但希望它可以帮助某人
【讨论】:
所以如果我们使用 PATINDEX,我们就不走运了?【参考方案2】: ... like '[[]%'
您使用[ ]
包围一个特殊字符(或范围)
请参阅SQL Server LIKE 中的“将通配符用作文字”部分
编辑,2011 年 11 月 24 日
注意:你不需要转义右括号...
【讨论】:
实际上是右括号]
不应该转义,否则会给出错误的结果【参考方案3】:
除了gbn的回答,另一种方法是使用ESCAPE
选项:
SELECT * from sampleTable where sampleData like '\[%' ESCAPE '\'
详情请见documentation
【讨论】:
以上是关于包含括号字符的 SQL Server LIKE的主要内容,如果未能解决你的问题,请参考以下文章
当“LIKE”子句包含参数时,SQL Server 不使用索引
Sql Server LIKE 查询中需要转义哪些字符[重复]