如何为包含开括号字符的字符串执行带有LIKE条件的SQL SELECT?

Eri*_*air 4 sql coldfusion cfquery qoq

我有一个简单的搜索查询:

<cfquery name="_qSearch" dbtype="Query">
    SELECT 
        *
    FROM    MyQoQ
    WHERE
        DESCRIPTION LIKE '%#URL.searchString#%'
</cfquery>
Run Code Online (Sandbox Code Playgroud)

此查询适用于大多数值.但是,如果有人搜索类似的值"xxx[en",它会弹出错误消息The pattern of the LIKE conditional is malformed..

有没有办法解决这个问题,因为支架在CFQUERY中有特殊用途?

Pet*_*ton 8

环比共享一个TSQL的功能(MS SQL Server)的,从而它不只是%_那些在LIKE通配符-它也支持正则表达式类型文字类,在[a-z]任何小写字母.

要转义这些值并匹配文字等价物,您可以使用字符类本身,即[[]匹配文字[,当然您可能也想要转义任何%_用户输入 - 您可以这样做所有三个:

'%#Url.SearchString.replaceAll('[\[%_]','[$0]')#%'
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的正则表达式替换(使用String.replaceAll)来匹配的所有实例[%_和包裹各一[.. ]-所述$0关于更换侧表示匹配的文本.