Сбой Android SQLite во время смены изменен - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над приложением, в котором я получаю данные из таблицы SQLite с условием.Я получаю правильный сдвиг id 1 и 2 во время смены A и B, но мое состояние не удается в смену C. Как я могу этого добиться?

Время смены -

  1. A = 06:30:00 - 14: 30: 00
  2. B = 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 Ответ

0 голосов
/ 07 июня 2018

Похоже, что речь идет о смене кладбища, которая начинается в один день в 22: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 нет типов даты / времени, и они просто хранятся в виде текста, вы все равно будете выполнять сравнение текста, поэтому ваши входные данные должны совпадать с данными сдвига, которые вы задали в своем вопросе.

Логика здесьв том, что для смены, которая содержится в течение одного дня, критерием является то, что время должно попадать в эту смену.Для смены, которая приближается к следующему дню, время должно быть либо больше, чем начало смены , либо раньше, чем конец этой смены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...