如何在SQLite中找到包含分号(;)的值?

时间:2013-08-28 11:25:51

标签: android sql sqlite match

我正在用分号(;)符号搜索值。所以我有:

SELECT * FROM table WHERE value MATCH '; "+lookingFor+"*'

它在SQLite中给出了逻辑错误。如何解释程序“;”不是为了打破代码?我做错了什么?

PS。值列示例:

apple; orange; banana
pineapple; watermelon

这是查询:

query = "SELECT id AS _id, 
entry_id , 
re_value, 
ke_value, 
g_value 
FROM search_eng_fts 
WHERE g_value MATCH '"
+ lookingFor+ "* OR
; "+lookingFor+"*'
ORDER BY length(g_value) 
LIMIT 100";

2 个答案:

答案 0 :(得分:2)

以下SQL有效:

SELECT * FROM list WHERE value like '%; banana%'

SQL Fiddle

虽然您可能想采取措施来避免SQL注入

答案 1 :(得分:2)

根据SQLite docs

  

MATCH运算符是match()应用程序定义函数的特殊语法。默认的match()函数实现会引发异常,对任何事情都没有用。但扩展可以使用更有用的逻辑覆盖match()函数。

您是否考虑过不将值存储为分隔字符串,而是使用关系数据库,因此每个值在新表中都有自己的行。

而不是

<强>Ť

TID     Name        Value
1       Test        apple; orange; banana
2       Test2       pineapple; watermelon

你有两张桌子,

T - 存储密钥信息

TID     Name
1       Test
2       Test2

TValues - 将带有链接的值存储回 T

TID     Name
1       apple
1       orange
1       banana
2       pineapple
2       watermelon

这样您的查询就变成了:

SELECT  T.TID, T.Name, TValues.Name
FROM    T
        INNER JOIN TValues
            ON T.TID = TValues.TID
WHERE   TValues.Name = 'apple';

如果您需要返回单个字符串,可以在SQLite中使用GROUP_CONCAT

SELECT  T.TID, T.Name, GROUP_CONCAT(TValues.Name, '; ') AS Value
FROM    T
        INNER JOIN TValues
            ON T.TID = TValues.TID
GROUP BY T.TID, T.Name;

<强> Examples on SQL Fiddle