Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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 如何获取以“%”(百分号)开头的SQLite数据?_Android_Android Sqlite - Fatal编程技术网

Android 如何获取以“%”(百分号)开头的SQLite数据?

Android 如何获取以“%”(百分号)开头的SQLite数据?,android,android-sqlite,Android,Android Sqlite,我有一个数据库,其中有几个表。我有一个表,其中包含一列,其中包含标记名和标记ID。有一种情况,我有标记名,我想要所有标记名以输入文本开头的标记的标记ID 问题是,当我在数据库中查找标记名%时,它返回该表的所有行。但我只需要那个些包含以输入文本开头的标记名的行,在本例中是以%符号开头的 例如: TagName ------- abc %test_tag def 如果我搜索%的话,结果应该是%test_标记 目前,我使用的查询是 SELECT * FROM Tags WHERE TagName l

我有一个数据库,其中有几个表。我有一个表,其中包含一列,其中包含标记名和标记ID。有一种情况,我有标记名,我想要所有标记名以输入文本开头的标记的标记ID

问题是,当我在数据库中查找标记名%时,它返回该表的所有行。但我只需要那个些包含以输入文本开头的标记名的行,在本例中是以%符号开头的

例如:

TagName
-------
abc
%test_tag
def
如果我搜索%的话,结果应该是%test_标记

目前,我使用的查询是

SELECT * FROM Tags WHERE TagName like '"+tagName+" %'
如何修复它

select * from Tags where Tagname like '%"+tagname+"'

这将完成此任务

%是sql的保留运算符,它的用法是:例如%ong%将获取包含ong字符串的行,例如:Long

您必须为%字符使用转义符。我不知道如何转义%character,但我相信你可以在短时间的谷歌搜索中找到它。

的想法是使用BETWEEN关键字来代替,用于以LIKE的通配符关键字开始/结束的查询,例如%和u

试着这样做:

String query = "SELECT * FROM Tags";
if(tagName.startsWith("%")) {
    query += " WHERE TagName BETWEEN " + tagName + " AND " + tagName + "z";
} else {
    query += " WHERE TagName LIKE '" + tagName + "%'";
}
正如建议的那样,您需要使用ESCAPE关键字。如果对你不起作用,请发布你的尝试。我已成功使用以下查询,该查询与https://de.wikipedia.org/wiki/%s:

基本上,选择一个转义字符,例如:,并将%的任何实例替换为:%s或您选择的任何字符。如果转义字符本身可以出现在搜索中,请将每个出现的转义字符替换为两个转义字符。伪代码:

search = '%test'
search = search.replace(':', '::')
search = search.replace('%', ':%')

query = "SELECT * FROM Tags WHERE TagName like '"+search+"%'"
请注意,我在您的%符号前删除了一个空格,这可能就是问题所在。另外,除非需要SQL注入,否则不要通过连接字符串来构建SQL查询。使用事先准备好的陈述

我知道这个问题很老了,但其他人会用谷歌搜索它,应该得到答案。

在这种情况下,您可以使用替换功能:

select *
from Tags where replace(TagName,'%','@')like '@%'

可能重复的我已经尝试了转义关键字,但没有成功你解决了这个问题吗?你试过我的答案了吗?如果在任何情况下,你自己找到了解决方案,请随意回答。此外,考虑接受解决问题的解决方案,通过勾选帮助你的复选标记和/或UpPoice答案。如果TAGNITY是%YES,这将返回所有行。但最好的做法是不要在标记名中添加%。试试其他类似或@的东西。为什么要在名称中包含%。任何与itI相关的东西都不能阻止%被使用,因为这是客户的要求。应该有另一种方法来逃避,比如单报价。您可以使用两次类似于“Ercans”的语句来避开单引号。难道没有其他方法可以像这样逃逸%吗?恐怕没有其他方法可以像这样逃逸%你能用另一个特殊字符代替%吗?即使是一个单词也可以完成这项工作:从标记名(如“土豆%”)处选择*以供将来参考:对于多个语句,需要将ESCAPE添加到每个语句中。例如,其中a列类似于“%\%%”转义“\”或b列类似于“%\%%”转义“\”。
select *
from Tags where replace(TagName,'%','@')like '@%'