web-dev-qa-db-fra.com

Requête SQLite, 'LIKE'

J'essaie de récupérer des informations de ma base de données.
J'ai des mots comme Lim Won Mong et Limited.

Si je fais ma requête, SELECT name FROM memberdb WHERE name LIKE '%LIM%', il affiche les deux Lim Won Mong et Limited et je souhaite uniquement les données de Lim Won Mong.

Comment dois-je réécrire ma requête?

16
Lene

Exécutez la requête suivante:

select name from memberdb where name like '% LIM %' OR name like "LIM %" OR name like "% LIM" OR name like "LIM"
39
jeet

Si vous voulez faire correspondre le mot "lim" (il correspond donc à "a lim", "lim a", "a lim a" et "lim", mais pas "limit" ou "alim"), vous pouvez utiliser le SQL REGEXP et utilisez les limites de Word ([[:<:]] et [[:>:]]). Ils correspondent également aux espaces (espaces, tabulations, sauts de ligne), au début/à la fin de la chaîne et à certains signes de ponctuation.

Quelque chose comme ça:

SELECT name FROM memberdb WHERE name REGEXP '[[:<:]]LIM[[:>:]]'

Notez que REGEXP n'est PAS sensible à la casse (sauf si vous utilisez des chaînes binaires).

Si vous voulez qu'il corresponde UNIQUEMENT aux espaces, vous pouvez toujours utiliser REGEXP; cela correspondra soit au début de la chaîne, soit à un espace, puis à "lim", puis à un espace ou à la fin de la chaîne:

SELECT name FROM memberdb WHERE name REGEXP '(^| )LIM( |$)'

Les deux solutions ont été testées sur des versions de SQL qui prennent en charge REGEXP (SQLite 3+; toutes Android utilise 3.5.9 ou supérieur).

4
Eric

Essaye celui-là:

SELECT name 
FROM MEMBERDB 
WHERE name LIKE 'LIM %' OR name LIKE '% LIM'
OR name LIKE '% LIM %' OR name LIKE 'LIM';

Supposons que vous ayez des données comme ceci:

'LIMITED'
'Lim Won Mong'
'Wang Tat Lim'
'ELIM TED'
'lim'
'Wang LIM tim'

Cette requête ne vous renverra que les données suivantes:

'Lim Won Mong'
'Wang Tat Lim'
'lim'
'Wang LIM tim'

Voir ce SQLFiddle

3
hims056