18

我正在尝试从我的数据库中检索信息。
我有像Lim Won Mong和这样的词Limited

如果我进行查询,SELECT name FROM memberdb WHERE name LIKE '%LIM%'它会同时显示Lim Won MongLimited我只想要来自 的数据Lim Won Mong

我应该如何重写我的查询?

4

3 回答 3

40

执行以下查询:

select name from memberdb where name like '% LIM %' OR name like "LIM %" OR name like "% LIM" OR name like "LIM"
于 2012-09-27T04:12:37.610 回答
4

如果你想匹配单词“lim”(所以它匹配“a lim”、“lim a”、“a lim a”和“lim”,但不匹配“limit”或“alim”),你可以使用SQLREGEXP关键字,并使用单词边界([[:<:]][[:>:]])。这些也匹配空格(空格、制表符、换行符)、字符串开始/结束和一些标点符号。

像这样的东西:

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

请注意,REGEXP它不区分大小写(除非使用二进制字符串)。

如果您希望它仅匹配空格,您仍然可以使用REGEXP; 这将匹配字符串的开头或空格,然后是“lim”,然后是空格或字符串的结尾:

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

两种解决方案都已在支持的 SQL 版本上进行了测试REGEXP(SQLite 3+;所有 Android 都使用 3.5.9 或更高版本)。

于 2012-09-27T04:12:06.143 回答
3

试试这个:

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

假设你有这样的数据:

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

此查询将只返回以下数据:

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

看到这个 SQLFiddle

于 2012-09-27T04:11:42.727 回答