微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在sqlite中查找列表是否包含另一个列表的任何元素

如何解决如何在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 举报,一经查实,本站将立刻删除。