2014-02-24 18 views
3

我有一個簡單的搜索查詢:如何使用LIKE條件爲包含開括號字符的字符串執行SQL SELECT?

<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中有特殊用處?

回答

8

環比股feature of TSQL(MS SQL Server)的,從而它不只是%_是在LIKE通配符 - 它也支持正則表達式類型文字類,如[a-z]任何小寫字母。

爲了逃避這些值,並匹配字面等效,您可以使用一個字符類本身,即[[]將匹配一個[,當然你可能也想逃避在用戶輸入任何%_ - 你可以做所有三個像這樣:

'%#Url.SearchString.replaceAll('[\[%_]','[$0]')#%' 

這只是一個簡單的正則表達式替換(使用String.replaceAll),以符合[%_所有實例和包裝各一[ .. ] - 在$0對更換側repres發送匹配的文本。

+0

謝謝,我會試試.... –

+1

僅供參考,您還可以使用[ESCAPE子句]指定轉義字符(http://help.adobe.com/zh_CN/ColdFusion/9.0/Developing /WSc3ff6d0ea77859461172e0811cbec0e4fd-7ff0.html#WSc3ff6d0ea77859461172e0811cbec0e4fd-7fd2) – Leigh

+0

這不起作用...例如,如果我使用值「xxx [en」,查詢如下所示:SELECT * FROM MyQoQ WHERE DESCRIPTION LIKE'%xxx [[ ] en%',即使直接查詢數據庫(即SELECT * FROM MyDBTable WHERE MyDBTable.DESCRIPTION LIKE'%xxx [en%'查找記錄。 –

相關問題