如何解决如何在sqlite中查找列表是否包含另一个列表的任何元素
我有一个sqlite
表,其中有一列selected_dates
。此列包含CustomDates
对象的列表。我想查询此列是否包含相同类型(customDates
)的其他列表的任何项目。但是我找不到任何办法。我尝试过:
@Query("SELECT * FROM schedule_table WHERE (type_daily IS 1) OR (:monthOfYear IS 1) " +
"OR (selectedDates IN (:customDates))" +
"ORDER BY scheduleID DESC")
LiveData<List<Schedule>> getSchedulesOfThisWeek(String monthOfYear,List<ScheduleType.Dates> customDates);
这是我的示例数据(List<Date>
对象以json
格式存储)Image of data in sqlite browser
:
[{"dayOfMonth":1,"month":8},{"dayOfMonth":2,{"dayOfMonth":3,{"dayOfMonth":4,{"dayOfMonth":5,{"dayOfMonth":6,{"dayOfMonth":7,{"dayOfMonth":8,{"dayOfMonth":9,{"dayOfMonth":10,{"dayOfMonth":11,{"dayOfMonth":12,{"dayOfMonth":13,{"dayOfMonth":14,{"dayOfMonth":15,{"dayOfMonth":16,{"dayOfMonth":17,{"dayOfMonth":18,{"dayOfMonth":19,{"dayOfMonth":20,{"dayOfMonth":21,{"dayOfMonth":22,{"dayOfMonth":23,{"dayOfMonth":24,{"dayOfMonth":25,{"dayOfMonth":26,{"dayOfMonth":27,{"dayOfMonth":28,{"dayOfMonth":29,"month":8}]
总而言之,如何在sqlite中查找两个列表是否相交?
解决方法
基本会议室数据库以主要数据类型存储数据。因此,您选择的日期为TEXT
格式。您可以执行LIKE
操作来找到匹配的列。
房间还提供了注释@RawQuery
。您可以使用它。对于您的问题,这可能是一个解决方案:
在Dao
界面中:
@RawQuery(observedEntities = Schedule.class)
LiveData<List<Schedule>> getSchedule(SupportSQLiteQuery query);
并使用getSchedule()
:
String query = "SELECT * FROM schedule_table WHERE " +
"(type_daily IS 1) OR (" + monthOfYear + " IS 1) OR " +
conditions + " ORDER BY scheduleID DESC";
return mDao.getSchedule(new SimpleSQLiteQuery(query));
其中condition
是您要查找的日期的String
。例如:
String condition = "selectedDates LIKE '%{\"dayOfMonth\":1,\"month\":8}%' OR selectedDates LIKE '%{\"dayOfMonth\":5,\"month\":8}%';
您可以创建一种方法,该方法将基于List<ScheduleType.Dates>
生成此字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。