2013-04-30 31 views
0

我有這樣的轉義特殊字符與FTS

Query query = session.createQuery("select object from EntityObject object where lower(object.columnName) like lower (E'%\\(test\\)%')"); 

Query query = session.createQuery("select object from EntityObject object where fts('english',contact.searchColumn,'testing (test)') = true; 

我試圖逃跑與反斜槓搜索文本的特殊字符和查詢Hibernate的選擇查詢我在開啓狀態下使用了帶有standard_conforming_strings的postgres 8.3。通過使用「E」我得到錯誤的

unexpected token: '%\(test\)%' near line 1 for the first case

並獲得以下錯誤了下情況

ERROR: syntax error in tsquery: "testing (test)"

請幫我解決這個問題。我的意圖是用反斜槓來轉義特殊字符,特別是括號「()」。

+0

爲什麼有一個「E」你喜歡子句單引號外面? – aksappy 2013-04-30 06:13:43

+0

我試圖轉義特殊字符,因爲它在這裏指定http://www.postgresql.org/docs/current/interactive/runtime-config-compatible.html#GUC-STANDARD-CONFORMING-STRINGS 「Escape string syntax should be如果應用程序希望將反斜槓視爲轉義字符,則可以使用它。「 – Dhivya 2013-04-30 07:30:59

+0

您是否嘗試使用限制? – aksappy 2013-04-30 09:35:57

回答

3

功能lower期待一個字符串作爲參數。 E'%\\(test\\)%'不是有效的字符串,因爲開頭沒有單個''E%\\(test\\)%'將是一個正確的字符串 - 我想知道你想要做什麼,它不正確在HQL中轉義。

like聲明中,只有兩個特殊通配符_%。如果你想逃避它們,你必須定義一個轉義字符。

例如:選擇名稱以一個underscrore _

from YourTable where name like '!_%' escape '!' 

如果你想逃離'在SQL(不僅是like語句)的任何地方,那麼你必須輸入兩次都行。

例如:選擇行這名字是Peter's

from YourTable where name = 'Peter''s' 
+0

其實我試圖逃避括號「()」,因爲我試圖追加反斜槓,然後我想逃避該字符串中的特殊字符。並且您的代碼「from YourTable其中名稱像'!_%'轉義'!'」 - 不會獲取結果我。 – Dhivya 2013-04-30 09:14:33

+0

您不需要轉義括號。它們在HQL'like'語句中沒有任何特殊含義。 – Johanna 2013-04-30 10:16:03

+0

是的謝謝你,因爲我們不需要轉義括號,但在tsquery('英語','testing(test)')= true我們需要正確嗎?你能告訴我在ts_query中做的方法嗎? – Dhivya 2013-04-30 10:32:46