2012-12-06 138 views
0

想象一下以下聯繫:在sqlite中搜索名字和姓氏的搜索謂詞?

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

我想下面的搜索字符串返回該聯繫人:

  • Walter White
  • White Walter

然而,上面的搜索字符串應該不返回以下聯繫人:

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

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

我試圖通過編寫sqlite謂詞來實現此目的。

我在想這是一個非常普遍的問題,但我在這裏沒有找到答案。

回答

1
SELECT * 
FROM MyTable 
WHERE first_name || ' ' || last_name = ? 
    OR last_name || ' ' || first_name = ? 
+0

這就是我實現的(除了我使用LIKE而不是=) ,但它不適用於雙重名稱。 –

+0

雙重名稱是什麼? –

+0

@ErikB如果你的意思是「Mary Sue Jones」這樣的名字,只要你保持Mary和Sue的正確順序,CL的答案應該可以做到。例如只有「Jones Mary Sue」和「Mary Sue Jones」是正確的搜索,但不是「Jones Sue Mary」。 – Maple

0

從CL的答覆意見工作: 你說的做的部分匹配。例如密歇根州返回邁克爾,沃爾特返回沃爾特·瑪麗返回瑪麗·蘇等

編輯:

使用類似掛羊頭賣狗肉一點反向和一些輸入填充,你得到這樣的:

SELECT * 
FROM People_Table 
WHERE first_name || ' ' last_name LIKE '%' || (SELECT replace(inputString, ' ', '%')) || '%' 
    OR last_name || ' ' first_name LIKE '%' || (SELECT replace(inputString, ' ', '%')) || '%' 

對於雙名如「瑪麗蘇瓊斯」,以下全部匹配: 「瑪麗瓊斯」,「瓊斯」,「蘇瓊斯」,「瓊斯蘇」,「蘇瑪麗」,「瑪麗蘇瓊斯」等 這種方法的缺點是,如果雙名稱的部分在搜索字符串中失序,那麼它就是w生病不匹配。你必須走出這個SQLite謂詞來處理這個問題。

0

第一分離&然後搜索姓=名字和姓氏=姓氏再反向以防萬一如果在姓氏的用戶類型第一

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 +「%'或FIRST_NAME LIKE'%」+ lastName +「%」AND LAST_NAME LIKE'%「+ firstName +」%'

相關問題