【问题标题】:SQL Server LIKE containing bracket characters包含括号字符的 SQL Server LIKE
【发布时间】:2011-04-09 08:02:25
【问题描述】:

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

sampleData (nvarchar(max))

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

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

我正在尝试编写一个简单的查询,该查询将通过仅检测左括号来返回所有具有这种格式列表的行。

SELECT * from sampleTable where sampleData like '[%'

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

感谢您的任何建议!

【问题讨论】:

    标签: sql sql-server pattern-matching


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-01
      • 2014-11-17
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多