Подтвердить что ты не робот

Как избежать подчеркивания в строковом запросе в спящем режиме и SQL?

_ (подчеркивание), заданное в запросе SQL, не выполняется.

Пример:

SELECT * FROM employee WHERE NAME LIKE '%k_p%';

Это соответствует и выводит много строк из строк, содержащих k_p

Помог ли кто-нибудь помочь в достижении этого в SQL, а также в Hibernate? Спасибо.

4b9b3361

Ответ 1

Вы пытались убежать от него:

SELECT * FROM employee WHERE NAME LIKE '%k\_p%';

\_ вместо _.

Ответ 2

В MySQL Solution: select * from users where id like '%k_p%';

In Hibernate

Вот решение:

List<UserDTO> userDTOList = signUpBusiness.getUserDTODetails("k", "p");

Вызвать этот метод

public List<UserDTO> getUserDTODetails(String firstMatch, String secondMatch) {
    List<UserDTO> userDTOList = new ArrayList<UserDTO>();
    Session session = null;
    try {
        session = SessionFactoryFpf.getCurrentSession();
        Criteria criteria = session.createCriteria(User.class);
        //MatchMode matchMode = MatchMode.ANYWHERE;
        //criteria.add(Restrictions.like("id", firstMatch, matchMode));
        criteria.add(Restrictions.like("id", "%"+firstMatch+"_"+secondMatch+"%"));
        List<User> userList = criteria.list();
        if (userList.size() > 0) {
            for (User user : userList) {
                UserDTO userDTO = new UserDTO();
                userDTO.setId(user.getId());
                userDTO.setDob(user.getDob());
                userDTO.setFullName(user.getFullName());
                userDTO.setGender(user.getGender());
                userDTO.setEmail(user.getEmail());
                userDTOList.add(userDTO);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        LOG.error("Type of exception occured in getUserDTODetails() is --> "+e);
    } finally {
        SessionFactoryFpf.closeSession(session);
    }
    return userDTOList;
}

Другой способ переключить комментарий в методе выше:

MatchMode matchMode = MatchMode.ANYWHERE;
criteria.add(Restrictions.like("id", firstMatch, matchMode));
//criteria.add(Restrictions.like("id", "%"+firstMatch+"_"+secondMatch+"%"));

Ответ 3

Я знаю, что уже поздно, но может быть решением для других программистов. Вы можете попробовать

SELECT * FROM employee WHERE NAME LIKE '%k[_]p%';