instr()函数SQLITE for Android?

时间:2013-04-23 22:16:42

标签: android sql sqlite function

我想在我现有的android上的sqlite数据库上执行以下操作,这是一种类似的构建 colomns:id --- rule --- path --- someotherdata

现在的规则,例如包含文件名的一部分(或者只是一些简单的东西,如“mypicture”或文件类型,如“jpg”)。现在我想要做的是,我想写一个查询,它获取我的所有规则,其中包含inputtring的一部分。 我试过以下示例:String value =“somepicturefilename.jpg”

我的陈述:

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

该语句在java中,因此应在语句中插入“value”。

然而,这不起作用。我不太熟悉sql和sqlite,有没有人有一个提示=;)谢谢。

编辑:我也尝试过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;";

但抛出“没有这样的操作”例外。

5 个答案:

答案 0 :(得分:3)

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

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

或不区分大小写的匹配:

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

答案 1 :(得分:0)

"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE rule LIKE '%"+ value + "%' ORDER BY " + KEY_ID+ " DESC;"

尝试这个。

答案 2 :(得分:0)

在LIKE模式中使用下划线(_)而不是百分比(%)。下划线将匹配值中的任何单个字符,而不是整个字符串序列。

"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE rule LIKE '_"+ value + "_' ORDER BY " + KEY_ID+ " DESC;"

LIKE operators

答案 3 :(得分:0)

我看不出你的SQL表达式有什么问题......唯一可能导致它被杀死的是不等式运算符!=

周围缺少空格

试试这个:

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

我不确定Android中的SQLite实现是否完整,你可能会发现某些操作不起作用,所以做一些简单的测试作为完整性检查。

如果这不起作用,您可以改变条件。

[field]='some_value'

与以下一样有效:

'some_value'=[field]

因此,在您的示例中,我认为您应该能够执行以下操作:

select distinct * from TABLE_RULES
where 'poniesAsUnicorns.jpg' like '%' + rule + '%';

我在mySQL中对此进行了测试,它不喜欢+连接,但它确实像这样工作:

select distinct * from TABLE_RULES
where 'poniesAsUnicorns.jpg' like replace('%rule%','rule',rule);

答案 4 :(得分:0)

"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE '" + value + "' like '%' || rule || '%' ORDER BY " + KEY_ID + " DESC;"