我有一个包含多个列和一列name
的数据库,我正在通过OrmLite执行以下sqlite语句:
SELECT `name`,`id`,`ita_name`,`setCode`
FROM `MyTable`
WHERE (`name` LIKE ?)
ORDER BY `name` LIMIT 30
一切正常,但如果name
栏的价值是"迈克尔*,*篮球运动员"我提交了#Michael;迈克尔篮球运动员"查询返回没有结果。
我已经尝试使用%myQueryText%,但没有成功。
如何从列中返回值,忽略"," ?
答案 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]+
匹配逗号或空格,并且出现次数为一次或多次,因此它匹配一个空格或空格以及逗号或逗号和更多空格......