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

时间:2014-02-24 21:44:39

标签: sql coldfusion cfquery qoq

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

<cfquery name="_qSearch" dbtype="Query">
    SELECT 
        *
    FROM    MyQoQ
    WHERE
        DESCRIPTION LIKE '%#URL.searchString#%'
</cfquery>

此查询适用于大多数值。但是,如果有人搜索"xxx[en"之类的值,则会使用错误消息The pattern of the LIKE conditional is malformed.进行轰炸。

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

1 个答案:

答案 0 :(得分:8)

QoQ共享一个feature of TSQL(MS SQL Server),它不仅仅是%_ LIKE中的通配符 - 它还支持正则表达式的字符类,如{{ 1}}表示任何小写字母。

要转义这些值并匹配文字等价物,您可以使用字符类本身,即[a-z]将匹配文字[[],当然您可能也想要逃避任何{{1}用户输入中的}和[ - 你可以这样做所有三个:

%

这只是一个简单的正则表达式替换(使用String.replaceAll)来匹配_'%#Url.SearchString.replaceAll('[\[%_]','[$0]')#%' [的所有实例,并将每个实例包装在%中.. _ - 替换方的[代表匹配的文字。