如何从“%”(百分号)开始获取SQLite数据?

问题描述 投票:0回答:5

我有一个数据库,我有几张桌子。我有一个表,其中包含一个包含标签名称和标签ID的列。在某种情况下,我有标签名称,我想要标签名称以输入文本开头的所有标签的标签ID。

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

例:

TagName
-------
abc
%test_tag
def

如果我搜索“%”,结果应为“%test_tag”。

目前,我正在使用的查询是

SELECT * FROM Tags WHERE TagName like '"+tagName+" %'

怎么解决?

android android-sqlite
5个回答
2
投票

正如here建议的那样,您需要使用ESCAPE关键字。如果它不适合您,请发布您的尝试。我已经成功使用了以下查询,它匹配https://de.wikipedia.org/wiki/%s

SELECT * FROM moz_places WHERE url LIKE '%de.wikipedia.org%\%s' ESCAPE '\'

基本上,选择一个转义字符(例如:),并用%(或你选择的任何字符)替换:%的任何实例。如果转义字符本身可以出现在搜索中,请使用带有两个转义字符的转义字符替换每个匹配项。伪代码:

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

query = "SELECT * FROM Tags WHERE TagName like '"+search+"%'"

请注意,我在%符号之前删除了一个空格,这可能是问题所在。此外,除非您想要SQL注入,否则不要通过连接字符串来构建SQL查询。使用预备陈述。

(我知道这个问题已经过时了,但其他人会谷歌它并且应该得到答案。)


0
投票

%是sql的保留运算符:LIKE %ong%将获取包含“ong”字符串的行,例如:“Long”。

您必须使用“%”字符的转义大小写。我不知道如何逃脱%字符,但我相信你可以在短的谷歌搜索中找到它。


0
投票

来自the accepted answer on other question的想法是使用BETWEEN关键字,用于查询以LIKE的通配符关键字开头/结尾(例如%_)。

尝试这样的事情:

String query = "SELECT * FROM Tags";
if(tagName.startsWith("%")) {
    query += " WHERE TagName BETWEEN " + tagName + " AND " + tagName + "z";
} else {
    query += " WHERE TagName LIKE '" + tagName + "%'";
}

0
投票

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

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

-1
投票
select * from Tags where Tagname like '%"+tagname+"'

这将完成这项工作

© www.soinside.com 2019 - 2024. All rights reserved.