如何在T-SQL中转义百分号?

231

这个问题的答案也有了,但它特指于DB2。

如果要使用 LIKE 操作符搜索一个已包含百分号 % 的字符串,该怎么办呢?LIKE 操作符会将百分号 % 符号用作通配符。

5个回答

346
使用括号。因此要查找75%。
WHERE MyCol LIKE '%75[%]%'

这比使用ESCAPE更简单,并且适用于大多数关系型数据库管理系统。


3
请注意,您不必在其他结构中(如用户函数、连接等)转义百分号符号。 - Bron Davies
3
可以提供更好的基数估计(从而提高执行计划)。 - Martin Smith
3
你也可以转义下划线通配符字符:[_]。那么如何转义开放方括号呢?像这样:[[]。http://www.sqlserver2000.databases.aspfaq.com/how-do-i-search-for-special-characters-e-g-in-sql-server.html - Csaba Toth
使用ESCAPE子句比微软脑残的引号机制更易于理解。 - Suncat2000

60

你可以在使用LIKE的时候添加ESCAPE关键字。只需在字符串中的每个现有%符号前面添加所需的字符(例如'!'),然后在查询末尾添加ESCAPE'!'(或您选择的字符)即可。

例如:

SELECT *
FROM prices
WHERE discount LIKE '%80!% off%' ESCAPE '!'

这将使数据库将80%视为要搜索的字符串的实际部分,而不是80(通配符)。

关于LIKE的文档


1
查询示例中的换行符表明ESCAPE子句是SELECT语句的一部分。根据文档,它应该是LIKE子句的一部分,这意味着如果您需要不同的转义字符,则理论上可以在WHERE块中的条件中使用不同的ESCAPE子句。 - pholpar

16
WHERE column_name LIKE '%save 50[%] off!%'

2
您可以使用以下代码查找特定值。
WHERE col1 LIKE '%[%]75%'

当你想要%号后面只保留一位数字时,可以使用以下代码。

WHERE col2 LIKE '%[%]_'

-1
在MySQL中, WHERE column_name LIKE '%|%%' ESCAPE '|'

但问题是关于T-SQL的。 - Peter Mortensen
1
OP确实询问了tsql,但当我在Google上进行SQL通用搜索时,它将我带到了这里,因此从搜索引擎的角度来看,这个答案很有帮助。顺便说一下,这种方法也适用于Firebird。 - theglossy1
在MySQL中,我尝试使用|,但它不起作用,但是使用转义字符\可以起作用。 - bobc82

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接