如何在查询中连接2个字段

时间:2017-12-28 10:38:00

标签: mysql

我有一个原生查询:

@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,'%'))" +

等...

但它不起作用。我怎么能这样做?

2 个答案:

答案 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%'

或者我感到困惑?