2015-12-21 4 views
0

Grails Версия: 3.0.7Grails и Hibernate createCriteria igorning посреднического белого пространства как п

Groovy Версия: 2.4.4

JVM версия: 1.8.0_51

Я следующий запрос в служба grails, и мой вопрос заключается в том, как «игнорировать» пробел в середине значения поля, такого как почтовый индекс.

В качестве примера, желаемый результат состоит в том, что 'LL551RB' будет соответствовать в аналогичном предложении для 'LL55 1RB', хранящемся в базе данных. И наоборот, решение было бы простым, чтобы исключить пробел из значения запроса, но я не могу определить, как удалить его из значений базы данных.

Я пробовал варианты ниже, которые, пока они выполняются, не совпадают правильно.

def allRecordsMatched = Event.createCriteria().listDistinct { 

     or { 
      eventCategories { 
       like("categoryName", "%" + search + "%") 
      } 
      like("eventName", "%" + search + "%") 
      like("address.town", "%" + search + "%") 
      like("address.county", "%" + search + "%") 
      like("address.postalCode".replaceAll("\\s",""), "%" + search + "%") 
     } 
     order("startDateTime", "asc") 
    } 

    return [results, allRecordsMatched] 
+0

Вы можете переписать его в HQL и использования TRIM (FIELD) функции в нем (не уверен, что он работает в HQL, но в SQL это работает – Koloritnij

+2

вы должны раздеться ненужные пробелы либо перед сохранением. ваш zip-код или фоновое задание. Все остальные методы приведут к большей сложности запроса и к худшей производительности поиска. – injecteer

+0

@ injecteer Хорошая точка. Я удалил пробелы, хранящиеся в существующих записях в БД, и реализовал сеттер на класс домена, чтобы удалить любые пробелы, а также конвертировать буквы в верхний регистр. –

ответ

1

Вы можете использовать sqlRestriction для замены всех пробелов из значения столбца перед сопоставлением его с параметром поиска. например:

address{ 
    Restrictions.sqlRestriction("REPLACE(postal_code, ' ', '') like %$search%") 
} 
+0

Спасибо за предложение. Хотя я пошел на другое решение, я не мог заставить выше работать. Где я должен разместить это объявление в блоке кода ? –

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

  • Нет связанных вопросов^_^