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?
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"
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).
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'