小编典典

instr()函数SQLITE是否适用于Android?

sql

我想在android上现有的sqlite数据库上执行以下操作,该数据库的构建方式类似于该列:id — rule — path —someotherdata

现在,规则例如包含文件名的一部分(或者只是一些琐碎的东西,例如“ mypicture”,也可能是文件类型,例如“
jpg”)。现在我想做的是,我想编写一个查询,该查询将获取我的所有规则,其中包含输入字符串的一部分。我尝试了以下示例:字符串值=“
somepicturefilename.jpg”

我的声明:

"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE instr('"+ value + "',rule)!=0 ORDER BY " + KEY_ID+ " DESC;"

该语句在Java中,因此应在该语句中插入“值”。

但是,这不起作用。我对sql或sqlite不太熟悉,没有人有tip =;)谢谢。

编辑:我也尝试过charindex,它也不起作用。

编辑:这样更详细的例子。给出以下数据库。

id --- rule ---
1      "jpg"
2     "ponies"
3     "gif"
4     "pdf"

现在,用户输入文件名。我们说“ poniesAsUnicorns.jpg”。因此,“poniesAsUnicorns.jpg”是我的输入字符串,并且查询应同时匹配id#1和id#2,因为“
poniesAsUnicorns.jpg”同时包含“ jpg”和“ ponies”

我希望这澄清了我想要的。

编辑:这也是我尝试过的:

String statement = "SELECT DISTINCT * FROM " + TABLE_RULES
            + " WHERE charindex(rule,'" + value
            + "') > 0 ORDER BY " + KEY_ID + " DESC;";

但会引发“无此操作”异常。


阅读 240

收藏
2021-05-05

共1个答案

小编典典

AFAIKinstr()不可用,因此您可以使用:

select * from table where replace("poniesAsUnicorns.jpg", rule, "") != "poniesAsUnicorns.jpg";

或不区分大小写的匹配项:

select * from table where replace(upper("poniesAsUnicorns.jpg"), upper(rule), "") != upper("poniesAsUnicorns.jpg");
2021-05-05