2017-08-30 3 views
0

Il existe une table avec le nom de colonne "téléphone" et des numéros différents dans différents formats.Une requête avec une condition LIKE inverse

Exemple:

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

Maintenant, si je veux chercher "3233237" alors la requête sera:

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

Le résultat sera:

id | number 
3 | +91 932 3233237 

Mais dans mon cas Je veux l'inverse

String search = "+92 343 9879098" 

select * from table where number like search 

Le résultat devrait être:

id | number 
1 | 03439879098 

Parce que la colonne nombre et la chaîne de recherche a une chaîne commune, qui est .

requête doit être conçue de telle sorte qu'il semble un enregistrement que les deux chaînes de recherche et de la valeur de la colonne a une chaîne de sous commune

bien vouloir me donner une idée.

+1

Qu'en est-il des espaces? Quelles parties du numéro doivent correspondre et lesquelles peuvent être différentes? Vous demandez de trouver des valeurs * assez similaires *, ce qui n'est pas bien défini. –

+2

Il suffit de supprimer "+92" de la recherche 'String' –

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me- to-be-a-very-simple-sql-query – Yunnosch

Répondre

0

Ce fut une question délicate. Vous pouvez le faire dans SQL pur exécution:

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

Nous sommes ici concaténer le nombre colonne avec les jokers %.

* Vous pouvez également résoudre programatically:

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 

Vive.

+0

merci .... travaillé –

-1

Avez-vous essayé NOT LIKE donc ce serait quelque chose comme

select * from table where name not like search

+0

Alors que son titre demande une fonction inverse, les détails de sa question ne le font pas. – Doomsknight