我有这样的查询
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;
我试图用反斜杠转义搜索文本中的特殊字符,我正在使用postgres 8.3,其中standard_conforming_strings处于on状态。通过使用“E”我得到错误
意外标记:第一种情况下第1行附近的'%\(test \)%'
并在下一个案例中低于错误
错误:tsquery中的语法错误:“testing(test)”
请帮我解决这个问题。我的意图是使用反斜杠来逃避特殊字符,特别是括号“()”。
答案 0 :(得分:3)
函数lower
期望字符串作为参数。 E'%\\(test\\)%'
不是有效字符串,因为开头没有单个'
。 'E%\\(test\\)%'
将是一个正确的字符串 - 我想我想知道你想用它做什么,在SQL中也不能正确地逃避HQL。
在like
语句中,只有两个特殊的通配符,_
和%
。如果要转义它们,则必须定义转义字符。
示例:选择名称以下划线_
from YourTable where name like '!_%' escape '!'
如果你想在SQL中的任何地方转义'
(不仅是like
语句),那么你必须输入两次。
示例:选择名称为Peter's
from YourTable where name = 'Peter''s'