2017-08-30 69 views
0

有一個列名稱爲「phone」的表格,其格式不同。具有反向LIKE條件的查詢

例子:

id | number 
1 | 03439879098 
2 | 01109890032 
3 | +91 932 3233237 

現在,如果我要搜索 「3233237」,那麼查詢將是:

select * from table where number like '%3233237%'; 

結果將是:

id | number 
3 | +91 932 3233237 

但在我的情況下,我想要反向

String search = "+92 343 9879098" 

select * from table where number like search 

結果應該是:

id | number 
1 | 03439879098 

由於列數搜索串具有相同的字符串,是。

查詢應該以這樣的方式設計,它看起來對於這兩個搜索字符串和列值有一個共同的子串

請給我一些想法的記錄。

+1

那些空間呢?數字中哪些部分應該匹配,哪些可以不同?您要求查找*有點相似*的值,但這些值沒有很好的定義。 –

+2

只需從搜索字符串中刪除「+92」 –

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-一個非常簡單的sql查詢 – Yunnosch

回答

0

這是一個棘手的一個。你可以做到這一點在純SQL執行:

select * from table where '+92 343 9879098' like '%' || number || '%'; 

這裏我們用通配符串接列。

*另外你可以以編程方式解決這個問題:

String search = "+92 343 9879098"; 
    String query = "select * from table where "; 
    String[] parts = search.split("\\s+"); 
    for (String oneNumber : parts) { 
     query += " number like '%" +oneNumber+ "%' OR"; 
    } 
    query += " false"; // this, or trim the last OR calculating the string length 

乾杯。

+0

謝謝....工作 –

-1

你試過NOT LIKE所以它會是這樣的

select * from table where name not like search

+0

雖然他的標題要求一個相反的功能,但他的問題中的細節卻沒有。 – Doomsknight