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

时间:2014-09-18 10:24:51

标签: android android-sqlite

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

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

示例:

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

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

目前,我使用的查询是

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

如何解决?

5 个答案:

答案 0 :(得分:1)

根据建议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注入。使用准备好的陈述。

(我知道这个问题已经过时了,但其他人会谷歌,并且值得回答。)

答案 1 :(得分:0)

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

您必须为“%”字符使用转义大小写。我不知道如何逃脱%字符,但我确定你可以通过简短的谷歌搜索找到它。

答案 2 :(得分:0)

来自the accepted answer on other question的想法是使用BETWEEN关键字来代替查询开始/结束LIKE的通配符关键字(例如%和{{ 1}})。

尝试这样的事情:

_

答案 3 :(得分:0)

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

import { promisify } from "util";
import fs from "fs";

const writeFile = promisify(fs.writeFile);

// this returns a Promise
writeFile("filename.txt", "content");

// which you can put in a try/catch block (in an async method)
// or .then and .catch on it.
writeFile("filename2.txt", "content").then(() => { /* do something after */ });

答案 4 :(得分:-1)

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

这将完成工作