SQLite匹配列名,忽略逗号

时间:2015-12-13 16:31:59

标签: android mysql database sqlite ormlite

我有一个包含多个列和一列name的数据库,我正在通过OrmLite执行以下sqlite语句:

SELECT `name`,`id`,`ita_name`,`setCode`
FROM `MyTable`
WHERE (`name` LIKE ?)
ORDER BY `name` LIMIT 30

一切正常,但如果name栏的价值是"迈克尔*,*篮球运动员"我提交了#Michael;迈克尔篮球运动员"查询返回没有结果。 我已经尝试使用%myQueryText%,但没有成功。 如何从列中返回值,忽略"," ?

1 个答案:

答案 0 :(得分:2)

SQL LIKE语句比您想象的更具体。 %通配符在通配符的位置匹配零个或多个字符,因此%myQueryText%匹配 anythingmyQueryText myQueryTextanything 但不是 myQuery(逗号)文本。您需要在逗号位置放置通配符,请参阅SQL LIKE wildcards

所以你可能想要像

这样的东西
... WHERE (`name` LIKE "Michael%Basketball player") ...

用Java编辑/准备搜索模式,可能像

String searchPattern = "Michael Basket player";
String preparedPattern = searchPattern.replace(' ', '%');
// outputs pattern "Michael%Basket%player"

哪个匹配迈克尔最好的篮球和其他体育运动员如果你想克服这些麻烦,你可以使用REGEXP并准备搜索模式:

String searchPattern = "Michael Basket player";
String preparedPattern = searchPattern.replace(' ', '[,\s]+');
// outputs pattern "Michael[,\s]+Basket[,\s]+player"

然后在SQL查询中将WHERE语句更改为

WHERE `name` REGEXP "Michael[,\s]+Basket[,\s]+player"

[,\s]+匹配逗号或空格,并且出现次数为一次或多次,因此它匹配一个空格或空格以及逗号或逗号和更多空格......