Java 如何使用查询字符串列表在Sqlite中执行LIKE查询

Java 如何使用查询字符串列表在Sqlite中执行LIKE查询,java,sqlite,android-room,Java,Sqlite,Android Room,我有一个包含以下列的sqlite表 从表中选择* +------+----------+--------------------------------------------------------+ |ID |姓名|日期| +------+----------+--------------------------------------------------------+ |1001 |单|[{“月日”:5,“月日”:9}] |1002 |多个|[{“月日”:2,“月日”:9},{“月日

我有一个包含以下列的sqlite表

从表中选择*
+------+----------+--------------------------------------------------------+
|ID |姓名|日期|
+------+----------+--------------------------------------------------------+
|1001 |单|[{“月日”:5,“月日”:9}]
|1002 |多个|[{“月日”:2,“月日”:9},{“月日”:3,“月日”:9}|
+------+----------+--------------------------------------------------------+
现在,如果我查询以下任一项,请返回正确的信息:

从表中选择*,其中的日期如“%dayOfMonth”:3%
从表中选择*,其中的日期如“%dayOfMonth”:5%
但我想把这两条语句合并成一行,我试过了答案,但都没用

此处日期长度可变且不精确。中的
操作也不起作用。

我想执行此操作
List getAllOf(List querystring)
,它将返回所有匹配项的列表。最简单的方法是什么?

如果要使用
之类的
执行此操作,需要使用
重复这些条件:

SELECT * 
FROM table_one 
WHERE dates LIKE '%dayOfMonth":3%' OR dates LIKE '%dayOfMonth":5%' 
正则表达式解决方案如下所示:

SELECT * FROM table_one WHERE dates REGEXP 'dayOfMonth":[35]' 
[35]
是一个字符类,意味着必须找到这两个字符中的任何一个

如果您有多个字符,则更通用的方法是使用
|
(在正则表达式中基本上代表“or”):


您可以在括号内放入任意数量的字符

如果要使用类似于
执行此操作,则需要使用
重复这些条件:

SELECT * 
FROM table_one 
WHERE dates LIKE '%dayOfMonth":3%' OR dates LIKE '%dayOfMonth":5%' 
正则表达式解决方案如下所示:

SELECT * FROM table_one WHERE dates REGEXP 'dayOfMonth":[35]' 
[35]
是一个字符类,意味着必须找到这两个字符中的任何一个

如果您有多个字符,则更通用的方法是使用
|
(在正则表达式中基本上代表“or”):

您可以在括号中放入任意数量的字符

但我想把这两条语句合并在一行中

为什么在相似条件之间不使用OR运算符?:)

我是说

SELECT * FROM table_one WHERE dates LIKE '%dayOfMonth":3%' OR dates LIKE '%dayOfMonth":5%' 
这里的一般规则是:如果不需要的话,不要在WHERE条件下使用REGEXP。使用REGEXP会失去索引搜索的优势

但我想把这两条语句合并在一行中

为什么在相似条件之间不使用OR运算符?:)

我是说

SELECT * FROM table_one WHERE dates LIKE '%dayOfMonth":3%' OR dates LIKE '%dayOfMonth":5%' 

这里的一般规则:如果没有必要,不要在WHERE条件下使用REGEXP。使用REGEXP会失去索引搜索的优势。

是的,我可以使用此方法,但我的查询字符串列表可能包含100多个项。还有其他有效的方法吗?谈论性能REGEXP并不是比OR运算符更好。如果您使用在
dates
列上创建索引,如果您使用前缀搜索
则像“dayOfMonth”":3%'
。如果使用regexp,则不使用索引。是的,我可以使用此方法,但我的查询字符串列表可能包含100多个项。还有其他有效的方法吗?谈论性能regexp并不是比OR运算符更好。如果在
日期
列上有索引,并且如果进行前缀搜索
LIKE,则偶数或LIKE要快得多“dayOfMonth”:3%
。如果使用regexp,则不使用索引。
regexp
显示错误。
查询有问题:[SQLITE\u error]SQL错误或缺少数据库(没有这样的函数:regexp)
regexp
显示错误。
查询有问题:[SQLITE\u error]SQL错误或缺少数据库(没有这样的函数:REGEXP)