我有一个原生查询:
@Query("SELECT p FROM Person p WHERE (" +
"(lower(p.name) like concat('%',:source,'%'))" +
"OR (lower(p.surname) like concat('%',:source,'%'))" +
"OR (lower(p.email) like concat('%',:source,'%'))" +
"OR (lower(p.phone) like concat('%',:source,'%')))")
Page<Person> search(@Param("source") String source, Pageable pageable);
它允许我搜索名字/姓氏等。 虽然我想在浏览器中搜索姓名和姓氏(带空格)。
我尝试添加
"(lower(p.name) like concat('%',:source,'%') AND (lower(p.surname) like concat('%',:source,'%')))" +
"OR (lower(p.name) like concat('%',:source,'%'))" +
等...
但它不起作用。我怎么能这样做?
答案 0 :(得分:1)
尝试类似
的内容concat(p.name, ' ', p.surname) like concat('%', :source, '‰')
只有两者非常接近并且空间完全匹配时才会起作用。您也可以找到一种方法来使用带有单词边界的rlike。
答案 1 :(得分:0)
如果你把Concat放在正确的位置,我正在努力解决 - 例如,如果Source ='Joe Bloggs',你正在寻找p.name ='Joe'和p.Surname ='Bloggs ',那么您不希望(concat(p.name, ' ', p.surname') LIKE concat('%', :source:, '%'))
评估为'Joe Bloggs' LIKE '%Joe Bloggs%'
或者我感到困惑?