在Sqlite的列值中搜索字符串

时间:2014-06-09 09:25:02

标签: android sqlite android-sqlite

我正在尝试search我的表格中的String。这些值存储在 此格式的列

Column Values

我的搜索字符串与上面类似。 i.e:逗号分隔String

我的查询是查明搜索字符串中是否存在任何值是否为我的列。

我试过的事情:

  1. 使用LikeLike来做它。但是它匹配单个值,即3个搜索字符串值我必须做出类似条件(对于大表来说代价很高)

    SELECT * from WHERE mycol LIKE'myval,%'or mycol LIKE '%,myval,%'or mycol or LIKE'%,myval'

  2. 使用instr函数:instr匹配字符串但只匹配第一次出现。

    例如:select * from A where instr ('123' ,'12')

  3. 使用Insearch中的这个String。但不能单独匹配值。

  4. 我尝试过像文档Here

  5. 中的Like Like Like(X,Y)

    所以我的问题有一种方法,而不是使用search运算符或string函数单独搜索列中的Like In。我可以在单query内搜索我的值值,例如InAny的组合(Sqlite} function不支持} Db }

    i.e select * from A where Any('my search string') in ('my column value')

    任何答案或评论都是高度赞赏的。希望得到回复。

1 个答案:

答案 0 :(得分:2)

您遇到问题,因为您的数据库未正确规范化。

要为每个MyTable行设置多个搜索ID,请创建一个可以包含多行的第二个表,每行中包含一个搜索ID:

CREATE TABLE MyTable (
    MyTableID INTEGER PRIMARY KEY,
    [...]
);
CREATE TABLE MyTableSearchIDs (
    MyTableID INTEGER REFERENCES MyTable(MyTableID),
    SearchID INTEGER  -- or TEXT or whatever
);

要搜索MyTable行,请先搜索其ID:

SELECT *
FROM MyTable
WHERE MyTableID IN (SELECT MyTableID
                    FROM MyTableSearchIDs
                    WHERE SearchID = 'myvalue')

使用连接也可以这样做:

SELECT MyTable.*
FROM MyTable
JOIN MyTableSearchIDs USING (MyTableID)
WHERE MyTableSearchIDs.SearchID = 'myvalue'