2013-04-30 2 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; 

Я пытаюсь избежать специальных символов в тексте поиска с обратной косой черты и Я использую postgres 8.3 со стандартным_конформированием_строками в состоянии. С помощью «E» Я получаю сообщение об ошибке, как

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

и получать ниже ошибки в следующем случае

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

Пожалуйста, помогите мне решить эту проблему. Мое намерение состоит в том, чтобы избежать специального символа, особенно круглых скобок "()" с обратной косой чертой.

+0

Почему ваш, как пункт, имеющий «E» вне одинарные кавычки? – aksappy

+0

Я попытался сбежать от специального символа, как это указано здесь. Http://www.postgresql.org/docs/current/interactive/runtime-config-compatible.html#GUC-STANDARD-CONFORMING-STRINGS «Синтаксис строки Escape должен быть используется, если приложение желает, чтобы обратная косая черта считалась escape-символами ». – Dhivya

+0

Вы пытались использовать ограничения? – aksappy

ответ

3

Функция lower ожидает строку в качестве параметра. E'%\\(test\\)%' не является допустимой строкой, потому что в начале нет ни одного '. 'E%\\(test\\)%' будет правильной строкой - подумал, что я задаюсь вопросом, что вы хотите с этим сделать, это не правильно экранирование в HQL ни в SQL.

В заявлении like содержатся только два специальных подстановочных знаков: _ и %. Если вы хотите избежать их, вы должны определить escape-символ.

Пример: Выбрать все строки, имя которых начинается с underscrore _

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

И если вы хотите, чтобы избежать ' где-нибудь в SQL (не только like заявление), то вы должны ввести его дважды.

Пример: Выберите строку, имя которого Peter's

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

На самом деле я пытаюсь избежать круглых скобок "()" для этого я пытался добавить его с помощью обратных косых черт, а затем я хочу избежать специальных символов в этой строке. И ваш код "из YourTable, где имя типа!! _% 'escape'! '" - не получает результат для меня. – Dhivya

+0

Вам не нужно выходить из круглых скобок. Они не имеют особого значения в выражении HQL 'like'. – Johanna

+0

да спасибо за то, что нам не нужно выходить из круглых скобок, но в tsquery ('english', 'testing (test)') = true, нам нужно право? Можете ли вы сказать мне, как это сделать в ts_query? – Dhivya

Смежные вопросы