Tra*_*vis 222 t-sql sql-server escaping character sql-like
我正在尝试使用类似的过滤器使用存储过程过滤项目.该列是varchar(15).我想要过滤的项目在名称中有方括号.
例如: WC[R]S123456.
如果我这样做LIKE 'WC[R]S123456',它将不会返回任何东西.
我找到了一些关于使用ESCAPE关键字的信息,LIKE但我不明白如何使用它来将方括号视为常规字符串.
Otá*_*cio 310
LIKE 'WC[[]R]S123456'
Run Code Online (Sandbox Code Playgroud)
要么
LIKE 'WC\[R]S123456' ESCAPE '\'
Run Code Online (Sandbox Code Playgroud)
应该管用.
小智 113
假设你想匹配文字its[brac]et.
你不需要逃脱]它,因为它只有在配对时具有特殊含义[.
因此逃避[就足以解决问题.您可以[ 通过替换它 来逃避[[].
And*_*ker 27
我需要从查询中排除以下划线开头的名称,所以我最终得到了这个:
WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character
Run Code Online (Sandbox Code Playgroud)
sco*_*ttm 13
如果您需要搜索%和_等特殊字符(通常是通配符),则使用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 '\'
Run Code Online (Sandbox Code Playgroud)
根据文件:
您可以使用通配符模式匹配字符作为文字字符。要将通配符用作文字字符,请将通配符括在方括号中。
您需要转义这三个字符%_[:
'5%' LIKE '5[%]' -- true
'5$' LIKE '5[%]' -- false
'foo_bar' LIKE 'foo[_]bar' -- true
'foo$bar' LIKE 'foo[_]bar' -- false
'foo[bar' LIKE 'foo[[]bar' -- true
'foo]bar' LIKE 'foo]bar' -- true
Run Code Online (Sandbox Code Playgroud)
如果像我这样需要转义'_'(下划线)之类的特殊字符,并且您不愿意/无法定义ESCAPE子句,则不妨将特殊字符括在方括号'[ '和']'。
这就解释了“怪异”字符串'[[]'的含义-它只是在方括号中包含'['字符,从而有效地将其转义。
我的用例是指定带有下划线的存储过程的名称,作为Profiler的过滤条件。因此,我将字符串'%name [_] of [_] a [_] stored [_] procedure%'放入了TextData LIKE字段中,它为我提供了想要实现的跟踪结果。
这是文档中的一个很好的示例: LIKE(Transact-SQL)-使用通配符作为文字