【问题标题】:Select rows from SQLite which contains given values从 SQLite 中选择包含给定值的行
【发布时间】:2013-06-13 20:29:48
【问题描述】:

问题描述

我有一个 SQLite 数据库,其中包含 category_codes 列,其格式如下:

1, 45 98765, 12 
545, 1, 898, 741, 78
45
87, 741
......

问题

我有一个字符串,例如545, 78。我想选择category_codes 列包含54578 值的所有行。

【问题讨论】:

  • 我假设 category_codes 列包含 TEXT 那么?
  • @jkau 是的,它们是文本
  • 最好重新设计数据库结构,让每一行只包含一个数字
  • @MichaelButscher 是的,我知道,但不幸的是它包含用逗号分隔的值:(
  • 您可以首先通过类似于category_codes like '%545%' and category_codes like '%78%' 的SQL WHERE 子句进行过滤,然后在第二步中使用Java 中的正则表达式来删除误报(因为%78% 也将匹配178

标签: java android sql sqlite android-sqlite


【解决方案1】:

我们有 4 个可能的针头位置:

  • 一开始
  • 最后
  • 在中间
  • 独自一人

如果您检查这些条件之一是否为真,您将获得该行。

SELECT * 
FROM tbl 
WHERE (
   col LIKE :param1 || ",%"
   OR col LIKE "%, " || :param1
   OR col LIKE "%, " || :param1 || ",%"
   OR col = :param1
) AND (
   col LIKE :param2 || ",%"
   OR col LIKE "%, " || :param2
   OR col LIKE "%, " || :param2 || ",%"
   OR col = :param2
)

当然你必须自己拆分字符串。您也可以动态创建语句,具体取决于您有多少参数。

另一种解决方案是创建一个 sqlite 函数并检查 Java 中的数据。根据您拥有的行数,这可能不是最佳选择。

并考虑一个更好的数据库架构。

【讨论】:

  • 并考虑一个更好的数据库架构
猜你喜欢
  • 2015-10-17
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多