包含括号字符的 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 表

当“LIKE”子句包含参数时,SQL Server 不使用索引

Sql Server LIKE 查询中需要转义哪些字符[重复]

使用使用 LIKE 的查询查询左大括号

Oracle SQL - REGEXP_LIKE 包含字符串“NA”以外的字符

Spark生成包含(SQL LIKE)字符串的列名列表