Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于Android的instr()函数SQLITE?_Android_Sql_Sqlite_Function - Fatal编程技术网

用于Android的instr()函数SQLITE?

用于Android的instr()函数SQLITE?,android,sql,sqlite,function,Android,Sql,Sqlite,Function,我想在android上现有的sqlite数据库上执行以下操作,它就是这样构建的 Columns:id规则路径someotherdata 例如,现在的规则包含文件名的一部分,或者只是一些琐碎的东西,比如mypicture,或者是一个文件类型,比如jpg。现在我想做的是,我想写一个查询,它获取我的所有规则,其中包含inputstring的一部分。 我尝试了以下示例:String value=somepicturefilename.jpg 我的发言: "SELECT DISTINCT * FROM "

我想在android上现有的sqlite数据库上执行以下操作,它就是这样构建的 Columns:id规则路径someotherdata

例如,现在的规则包含文件名的一部分,或者只是一些琐碎的东西,比如mypicture,或者是一个文件类型,比如jpg。现在我想做的是,我想写一个查询,它获取我的所有规则,其中包含inputstring的一部分。 我尝试了以下示例:String value=somepicturefilename.jpg

我的发言:

"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE instr('"+ value + "',rule)!=0 ORDER BY " + KEY_ID+ " DESC;"
该语句是用java编写的,因此应该在语句中插入值

然而,这是行不通的。我对sql和sqlite都不太熟悉,有人有什么建议吗;谢谢

编辑:我也试过charindex,但也没用

编辑:这是一个更详细的例子。 给出了以下数据库

id --- rule ---
1      "jpg"
2     "ponies"
3     "gif"
4     "pdf"  
现在,用户输入一个文件名。比如说poniesasonicorns.jpg。因此,poniesAsUnicorns.jpg是我的输入字符串,查询应该同时匹配id1和id2,因为poniesAsUnicorns.jpg同时包含jpg和ponies

我希望这能澄清我想要什么

编辑: 以下是我也尝试过的:

String statement = "SELECT DISTINCT * FROM " + TABLE_RULES
            + " WHERE charindex(rule,'" + value
            + "') > 0 ORDER BY " + KEY_ID + " DESC;";
但是抛出了一个没有这样操作的异常

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

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");

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

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

我看不出您的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);

我已经试过了。但我基本上需要相反的方式。问题是。。。列需要是的一部分,例如小于输入字符串。请参阅:04-24 00:37:38.057:D/RulesHelper21328:按属性找到0个条目:从规则中选择DISTINCT*,其中类似“%IMG_20130418_123133.jpg%”的规则按id描述排序;如果你添加了一个更详细的例子,说明你所拥有的和你所期望的,那么就更容易回答了。谢谢你的订婚。这是失败还是没有结果?logcat中有任何消息吗?instr抛出一个sql异常,表示没有这样的操作..我刚刚在中尝试了您的sql查询,看起来很好。。。我不明白为什么这在Androidhey是无效的。我试过你的陈述。类似的一个不起作用,因为我想它把规则当作字符串,而不是字段。就像替换东西一样,我一点也不明白。。。这该怎么办?是否将规则中的单词role替换为字段规则?哦,没错。。。它从第一部分中去掉了rule这个词,并将字段值(也称为rule)插入到间隙中。这并没有起到作用,因为正如我所说的,我需要用另一种方式。04-24 09:23:28.555:D/RulesHelper4399:按属性找到0个条目:从规则中选择DISTINCT*,其中规则如“IMG_20130418_124142.jpg”按id描述排序;哈,这看起来很管用!你知道它是否区分大小写吗?谢谢:工作替代方案!
"SELECT DISTINCT * FROM " + TABLE_RULES + " WHERE '" + value + "' like '%' || rule || '%' ORDER BY " + KEY_ID + " DESC;"