代码之家  ›  专栏  ›  技术社区  ›  Moin Khan

换班期间android sqlite条件失败

  •  2
  • Moin Khan  · 技术社区  · 6 年前

    我正在开发一个应用程序,在这个应用程序中,我使用一个条件从sqlite表获取数据。我在A班和B班得到了正确的班次ID 1和2,但在C班我的情况失败了。我怎样才能做到这一点?

    换档正时-

    1. =06:30:00至14:30:00
    2. =14:30:00至22:30:00
    3. C =22:30:00至06:30:00

    下面是我的代码-

    Cursor cursor = db1.rawQuery("SELECT shift_id, shift_name FROM shift_master WHERE start_time <= time('" + time + "') AND  end_time >= time('" + time + "')", null);
    
    if (cursor.moveToFirst()) {
       do {
           shiftId = cursor.getInt(0);
           shiftName = cursor.getString(1);
           txtShift.setText("Shift" + "-" + shiftName);
    
           } while (cursor.moveToNext());
        }
            cursor.close();
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Tim Biegeleisen    6 年前

    问题似乎是墓地轮班,从一天晚上10:30开始,一直持续到第二天早上6:30。一种选择可能是为墓地轮班添加另一个逻辑检查:

    SELECT shift_id, shift_name
    FROM shift_master
    WHERE
        (end_time > start_time AND time BETWEEN start_time AND end_time) OR
        (end_time < start_time AND (time > start_time OR time < end_time));
    

    此查询假定 time 输入的形式是 %H:%i%s ,例如 12:30:05 . 由于sqlite中没有日期/时间类型,而且这些类型只是作为文本存储的,因此无论如何,您都要进行文本比较,因此您的输入应该与您在问题中给出的移位数据相匹配。

    这里的逻辑是,对于包含在一天之内的移位,标准是时间必须落在该移位内。如果轮班到第二天,则时间必须大于轮班开始时间 早于轮班结束。