转义特殊字符与FTS
我有这样的转义特殊字符与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)"
请帮我解决这个问题。我的意图是用反斜杠来转义特殊字符,特别是括号“()”。
功能lower
期待一个字符串作为参数。 E'%\\(test\\)%'
不是有效的字符串,因为开头没有单个'
。 'E%\\(test\\)%'
将是一个正确的字符串 - 我想知道你想要做什么,它不正确在HQL中转义。
在like
声明中,只有两个特殊通配符_
和%
。如果你想逃避它们,你必须定义一个转义字符。
例如:选择名称以一个underscrore _
from YourTable where name like '!_%' escape '!'
如果你想逃离'
在SQL(不仅是like
语句)的任何地方,那么你必须输入两次都行。
例如:选择行这名字是Peter's
from YourTable where name = 'Peter''s'
其实我试图逃避括号“()”,因为我试图追加反斜杠,然后我想逃避该字符串中的特殊字符。并且您的代码“from YourTable其中名称像'!_%'转义'!'” - 不会获取结果我。 – Dhivya 2013-04-30 09:14:33
您不需要转义括号。它们在HQL'like'语句中没有任何特殊含义。 – Johanna 2013-04-30 10:16:03
是的谢谢你,因为我们不需要转义括号,但在tsquery('英语','testing(test)')= true我们需要正确吗?你能告诉我在ts_query中做的方法吗? – Dhivya 2013-04-30 10:32:46
为什么有一个“E”你喜欢子句单引号外面? – aksappy 2013-04-30 06:13:43
我试图转义特殊字符,因为它在这里指定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
您是否尝试使用限制? – aksappy 2013-04-30 09:35:57