用于在sqlite中搜索名字和姓氏的搜索谓词?

用于在sqlite中搜索名字和姓氏的搜索谓词?,sql,sqlite,search,predicate,Sql,Sqlite,Search,Predicate,想象一下下面的接触: { first_name:"Walter", last_name:"White" } 我希望以下搜索字符串返回该联系人: Walter White White Walter 但是,上述搜索字符串不应返回以下联系人: { first_name:"Skylar", last_name:"White" } { first_name:"Walter", last_name:"Grey" } 我试图通过编写sqlite谓词来实现这一点 我认为这一定是

想象一下下面的接触:

{
  first_name:"Walter",
  last_name:"White"
}
我希望以下搜索字符串返回该联系人:

  • Walter White
  • White Walter
但是,上述搜索字符串不应返回以下联系人:

{
  first_name:"Skylar",
  last_name:"White"
}

{
  first_name:"Walter",
  last_name:"Grey"
}
我试图通过编写sqlite谓词来实现这一点


我认为这一定是一个非常常见的问题,但我在这里没有找到一个问题来回答这个问题。

根据CL答案中的注释:
SELECT *
FROM MyTable
WHERE first_name || ' ' || last_name = ?
   OR last_name || ' ' || first_name = ?
你说的是做部分匹配。e、 迈克还回迈克尔,沃尔特还回沃尔特,玛丽还回玛丽苏,等等

编辑:

使用一些小技巧和一些输入填充,可以得到以下结果:

SELECT *
FROM People_Table
WHERE first_name || ' ' last_name LIKE '%' || (SELECT replace(inputString, ' ', '%')) || '%'
   OR last_name || ' ' first_name LIKE '%' || (SELECT replace(inputString, ' ', '%')) || '%'
对于“Mary Sue Jones”这样的双重名称,以下内容将全部匹配: “玛丽·琼斯”、“琼斯”、“休·琼斯”、“琼斯·休”、“休·玛丽”、“玛丽·休·琼斯”等。
此方法的缺点是,如果双倍名称的部分在搜索字符串中顺序错误,则它将不匹配。您必须跳出这个SQLite谓词来处理这个问题。

首先分离&然后搜索FirstName=FirstName和LastName=LastName,如果用户首先键入LastName,则反向搜索

try {       
    int firstSpace = search_str.indexOf(" "); // detect the first space character
    firstName = search_str.substring(0, firstSpace);  // get everything upto the first space character
    lastName = search_str.substring(firstSpace).trim(); // get everything after the first space, trimming the spaces off
        }
catch (Exception c){}

我实现的名字是“%”+firstName+“%”和姓氏是“%”+lastName+“%”或姓氏是“%”+lastName+“%”和姓氏是“%”+firstName+“%”

这是我实现的(除了我用LIKE代替=),但它不适用于双名。@ErikB如果你指的是“Mary Sue Jones”这样的名字,只要你让玛丽和苏保持正确的顺序,CL的回答就应该起作用。e、 g.只有“Jones Mary Sue”和“Mary Sue Jones”是正确的搜索,但不是“Jones Sue Mary”。@Maple是的,但问题是它对“Mary Jones”不起作用。@ErikB你说的是进行部分匹配。e、 g.迈克尔返回迈克尔,沃尔特返回沃尔特,玛丽返回玛丽苏,等等@ErikB在CL的基础上,我在下面找到了一个解决双名问题的解决方案。