0

次の連絡先を想像してください。

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

その連絡先を返すには、次の検索文字列が必要です。

  • Walter White
  • White Walter

ただし、上記の検索文字列では、次の連絡先は返されません。

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

{
  first_name:"Walter",
  last_name:"Grey"
}

私はsqlite述語を書くことでこれを達成しようとしています。

これは非常に一般的な問題だと思いますが、これに答える質問が見つかりませんでした。

4

3 に答える 3

0

CLの回答のコメントからの作業:部分一致を行うことについて話している。たとえば、Mich は Michael を返し、Walt は Walter を返し、Mary は Mary Sue を返します。

編集:

少し逆の LIKE トリックといくつかの入力パディングを使用すると、次のようになります。

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」のような二重名の場合、「Mary Jones」、「Jones」、「Sue Jones」、「Jones Sue」、「Sue Mary」、「Mary Sue Jones」などはすべて一致します。このメソッドの違いは、ダブル ネームの部分が検索文字列内で順不同である場合、一致しないことです。これに対処するには、この SQLite 述語の外に出る必要があります。

于 2013-03-08T19:53:37.757 に答える
0

最初に区切り、次に FirstName = firstname と 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){}

FIRST_NAME LIKE '%"+firstName+"%' AND LAST_NAME LIKE '%"+lastName+"%' OR FIRST_NAME LIKE '%"+lastName+"%' AND LAST_NAME LIKE '%"+firstName+"%'

于 2015-05-04T14:40:34.403 に答える