如何为SQL LIKE在用户输入中转义特殊字符?

| 以下面的示例为例(SQL Server 2008-可以使用更多示例)。您将不得不想象
@query
是某些参数,其来源是用户输入:
DECLARE @query varchar(100)
SET @query = \'less than 1% fat\'

CREATE TABLE X ([A] VARCHAR(100))
INSERT X VALUES (\'less than 1% fat\')
INSERT X VALUES (\'less than 1% of doctors recommend this - it\'\'s full of fat!\')
SELECT * FROM X WHERE A LIKE \'%\' + @query + \'%\'
DROP TABLE X
查询状态为
\'less than 1% fat\'
,但实际上得到的比我们想要的要多:
less than 1% fat
less than 1% of doctors recommend this - it\'s full of fat!
为了获得所需的行为,我将
@query
更改为
\'less than 1[%] fat\'
-然后仅返回第一个结果。 是否有一种标准方法为使用ѭ6的子句准备字符串,还是我必须自己滚动?     
已邀请:
可以使用自由文本搜索和CONTAINS或FREETEXT谓词来代替使用LIKE。带有前导通配符的LIKE会忽略索引,并进行全表扫描,而全文搜索使用现有的自由文本索引来加快搜索速度。您必须先配置自由文本索引,然后才能使用它。 如果要坚持使用LIKE,最好的解决方案是在客户端代码中转义字符串。 T-SQL提供了非常有限的字符串操作功能,而REPLACE函数甚至不接受通配符。您将必须嵌套多个REPLACE语句以说明LIKE使用的所有通配符。 如果搜索字符串中可能包含[或]字符,则可以将其与ESCAPE子句结合使用,并使用§,¶或¤等稀有字符作为转义字符。     
SQL Server允许您指定一个转义字符,然后您可以在使用查询字符串之前先对其进行转义。 我链接的MSDN页面中的示例:
SELECT c1 
FROM mytbl2
WHERE c1 LIKE \'%10-15!% off%\' ESCAPE \'!\';
    

要回复问题请先登录注册