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