2013-04-30 186 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