如果给定列包含内部任何位置的文本,请尝试进行将返回匹配的查询。例如,如果我要传递“真的”这个词,那么包含文本“这是一个非常长的文本行”的列将匹配。到目前为止,我的查询仅在完全匹配时返回,因此它只匹配包含“真正”的列,就是它。
我尝试了几种方法,但两者似乎都返回了相同的结果:
第一种方式(s是我传入的字符串):
Cursor cursor = mDb.query(DATABASE_TABLE, new String[] {KEY_TITLE}, KEY_TITLE + " LIKE '%" + s + "%' COLLATE NOCASE", null, null, null, null);
下一步
String p_query = "SELECT COUNT(*) FROM data WHERE number=? COLLATE NOCASE";
答案 0 :(得分:27)
如果给定列包含内部任何位置的文本,则尝试进行将返回匹配的查询。
这对我有用,并且参数化了:
Cursor cursor = mDb.query(DATABASE_TABLE, new String[] {KEY_TITLE},
KEY_TITLE + " LIKE ?", new String[] {"%" + s + "%"},
null, null, null);
“真的”是一个非常明显的词,但是如果你正在寻找像“冰”这样的东西并且不想要“骰子”,“副”,“冰淇淋”等,你将不得不使用不同的模式,如:"% " + s + " %"
和s + " %"
。
或者使用带有tokenizer的FTS表,如Porter Stemming。