【发布时间】:2014-03-23 21:54:15
【问题描述】:
我使用的是 Sqlite3.7.15。 我有一个名为 color 的列,其中包含逗号分隔的数字,例如Color1、Color3、Color15 和另一行只有“Color15”。 我想获取所有包含“Color1”的行,
Select color from table where color like '%Color1%';
返回包含例如的行颜色 15。 如果我使用
Select color from table where color like '%Color15,%'; //(note comma at end)
我不会得到颜色为 15 的行(如果这是字符串中的最后一项。 我想我可以用逗号终止所有字符串并进行相应调整,但这似乎很笨拙。
我试过instr(color,'Color1')>0; (在 sqlite3.7.15 版本上,但这没有帮助)
我的 sqlite3 数据库支持面向 Android 2.3(姜饼)的应用。
我会尽量让这一点更清楚; 以下是示例查询的前 10 行,均不正确:
1|Color2,Color4,Color3
2|Color6,Color12,Color3
3|Color1,Color2,Color3
4|Color1,Color2
5|Color1,Color2,Color3
6|Color6,Color12,Color3
7|Color2,Color3,Color13
8|Color8,Color4,Color3,Color1
9|Color2,Color5,Color3,Color1
10|Color11,Color12,Color5,Color2,Color1,Color3
“sqlite> select _id,color from identity where color like 'Color1';” – 没有返回行。
“sqlite> select _id,color from identity where color like '%Color1';” - 返回
8|Color8,Color4,Color3,Color1
9|Color2,Color5,Color3,Color1
“select _id,color from identity where color like 'Color1%';” – 返回
3|Color1,Color2,Color3
4|Color1,Color2
5|Color1,Color2,Color3
10|Color11,Color12,Color5,Color2,Color1,Color3
“select _id,color from identity where color like '%Color1%';” – 返回
2|Color6,Color12,Color3
3|Color1,Color2,Color3
4|Color1,Color2
5|Color1,Color2,Color3
6|Color6,Color12,Color3
7|Color2,Color3,Color13
8|Color8,Color4,Color3,Color1
9|Color2,Color5,Color3,Color1
10|Color11,Color12,Color5,Color2,Color1,Color3
select _id,color from identity where color like '%Color1,%';(注意逗号) - 返回
3|Color1,Color2,Color3
4|Color1,Color2
5|Color1,Color2,Color3
10|Color11,Color12,Color5,Color2,Color1,Color3
正确的返回是
3|Color1,Color2,Color3
4|Color1,Color2
5|Color1,Color2,Color3
8|Color8,Color4,Color3,Color1
9|Color2,Color5,Color3,Color1
10|Color11,Color12,Color5,Color2,Color1,Color3
数据库也支持iOS版本的应用,使用Core Data,所以对数据库的改动越少越好。
【问题讨论】:
-
您可能想了解数据库规范化en.wikipedia.org/wiki/Database_normalization 和诸如 3NF 之类的东西。