【问题标题】:How to find if a list contains any element of another list in sqlite如何在sqlite中查找列表是否包含另一个列表的任何元素
【发布时间】:2020-09-29 13:44:04
【问题描述】:

我有一个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&lt;Date&gt; 对象以json 格式存储)Image of data in sqlite browser:

[{"dayOfMonth":1,"month":8},{"dayOfMonth":2,"month":8},{"dayOfMonth":3,"month":8},{"dayOfMonth":4,"month":8},{"dayOfMonth":5,"month":8},{"dayOfMonth":6,"month":8},{"dayOfMonth":7,"month":8},{"dayOfMonth":8,"month":8},{"dayOfMonth":9,"month":8},{"dayOfMonth":10,"month":8},{"dayOfMonth":11,"month":8},{"dayOfMonth":12,"month":8},{"dayOfMonth":13,"month":8},{"dayOfMonth":14,"month":8},{"dayOfMonth":15,"month":8},{"dayOfMonth":16,"month":8},{"dayOfMonth":17,"month":8},{"dayOfMonth":18,"month":8},{"dayOfMonth":19,"month":8},{"dayOfMonth":20,"month":8},{"dayOfMonth":21,"month":8},{"dayOfMonth":22,"month":8},{"dayOfMonth":23,"month":8},{"dayOfMonth":24,"month":8},{"dayOfMonth":25,"month":8},{"dayOfMonth":26,"month":8},{"dayOfMonth":27,"month":8},{"dayOfMonth":28,"month":8},{"dayOfMonth":29,"month":8}]

一句话,sqlite中如何判断两个List是否相交?

【问题讨论】:

  • 注意,比较数字时应该使用=符号。 IS 运算符用于检查 NULL。您还可以显示一些示例数据吗?带有数据的表结构会非常有用。
  • @AleksG 先生,我已经编辑了问题。

标签: java android sqlite android-room


【解决方案1】:

基本上房间数据库以主要数据类型存储数据。所以你选择的日期是TEXT 格式。您可以执行LIKE 操作来查找匹配的列。

Room 还提供了注解@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&lt;ScheduleType.Dates&gt; 生成此字符串。

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 2012-11-09
    • 2020-07-07
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多