我试图用于过滤与使用类似的存储过程的项目。列是一个varchar(15)。我想过滤的项目有方括号中的名字。

例如:WC[R]S123456

如果我做了LIKE 'WC[R]S123456'它不会返回任何东西。

我发现使用具有ESCAPELIKE关键字的一些信息,但我不知道如何使用它来治疗方括号作为一个普通字符串。

有帮助吗?

解决方案

LIKE 'WC[[]R]S123456' 

LIKE 'WC\[R]S123456' ESCAPE '\'

应该工作。

其他提示

让我们说你要匹配的文字its[brac]et

您不必逃避],因为它只有当它与[配对特殊的意义。

<强>因此逸出[足以解决问题。您可以逃脱[ 通过用替换它 [[]

我需要排除与查询下划线开始的名字,所以我结束了这一点:

WHERE b.[name] not like '\_%' escape '\'  -- use \ as the escape character

下面是我实际使用:

like 'WC![R]S123456' ESCAPE '!'

在ESCAPE关键字,如果你需要搜索特殊字符,如%和_,这通常是通配符使用。如果指定ESCAPE,SQL将逐字搜索的字符%和_。

这里的一些更多的例子

SELECT columns FROM table WHERE 
    column LIKE '%[[]SQL Server Driver]%' 

-- or 

SELECT columns FROM table WHERE 
    column LIKE '%\[SQL Server Driver]%' ESCAPE '\'

如果您需要转义特殊字符例如“_” (下划线),因为它是在我的情况下,你都不愿意/不能够定义例外条款,您不妨以封闭用方括号的 '['和<强> ']'

的特殊字符

这解释了 “怪异” 字符串的意义的 '[[]' - 它只是涵盖的 '['用方括号字符,有效地逸出它<。 / p>

我的用例是指定与在它下划线作为过滤标准的探查存储过程的名称。所以,我已经把字符串 '%名称[_]的[_]一个[_]存储[_]过程%' 的LIKE的TextData领域,它给了我跟踪的结果,我想实现的。

下面是从文档一个很好的例子: LIKE(的Transact-SQL) - 使用通配符作为文字

而不是“\”或键盘上的其他字符,还可以使用特殊字符不在键盘上。根据o您的使用情况下,这可能是必要的,如果你不希望用户输入意外地被用作转义字符做。

使用以下

有关的用户输入来搜索,因为它是使用逃逸,因为其将需要以下替换所有的特殊字符(下面覆盖所有的SQL Server)。

下面单引号“'”不采取,因为它不象条款影响,因为它是字符串连接的问题。

“ - ”。& “^” 和 “]” 取代不需要因为我们逃逸 “[”

String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");

然后,在SQL查询它应该是如下。 (在参数化查询中,可以与上述更换后的图案被添加字符串)。

要搜索完全匹配的字符串。

like 'FormattedString' ESCAPE 'ð'

要搜索与字符串启动

like '%FormattedString' ESCAPE 'ð'

要搜索与串结束

like 'FormattedString%' ESCAPE 'ð'

要搜索的字符串与包含

like '%FormattedString%' ESCAPE 'ð'

等其它模式匹配。但直接用户输入需要如上述那样格式化。

scroll top