1

我有这样的查询

 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 状态。通过使用“E”,我收到错误

意外标记:第一种情况下第 1 行附近的“%\(test\)%”

并在下一个案例中低于错误

错误:tsquery 中的语法错误:“测试(测试)”

请帮我解决这个问题。我的意图是转义特殊字符,尤其是带反斜杠的括号“()”。

4

1 回答 1

3

该函数lower需要一个字符串作为参数。不是有效字符串,因为开头E'%\\(test\\)%'没有单个。将是一个正确的字符串——我想我想知道你想用它做什么,在 HQL 中转义也不正确,在 SQL 中也不正确。''E%\\(test\\)%'

like语句中只有两个特殊的通配符_%. 如果你想转义它们,你必须定义一个转义字符。

示例:选择名称以下划线开头的所有行_

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

如果你想转义'SQL 中的任何地方(不仅仅是like语句),那么你必须输入两次。

示例:选择名称所在的行Peter's

from YourTable where name = 'Peter''s'
于 2013-04-30T07:36:57.923 回答