Сравнение даты и времени в SQLite с уникальным форматом - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть требование, в котором столбец с информацией о дате и времени должен сравниваться с текущей датой и временем.Если раньше, то эта конкретная запись должна быть удалена.Я реализовал приведенную ниже реализацию, но не получил никаких ошибок, и ожидаемое поведение не встречается.

SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy HH:mm", Locale.getDefault());
        Calendar nowCalendar = Calendar.getInstance();
        String strNowTime = dateFormat.format(nowCalendar.getTime());

        // Delete the records at Manager_Dashboard SQLiteDB
        String whereClause = "DATETIME(End_Time) < DATETIME(?)";
        String whereArgs[] = {strNowTime};

        dbOfflineRange.delete("Offline_Range",whereClause,whereArgs);

Как вы могли заметить, если у меня есть запись с End_Time в тексте в таблице SQLite (как 30 Nov 2018 21:35)), то это следует сравнить с текущей датой и временем (как 30 Nov 2018 23:35)

Поскольку End_Time раньше, чем сейчас, я ожидаю удаления.Но этого не происходит.

1 Ответ

0 голосов
/ 30 ноября 2018

Функции SQL даты и времени требуют, чтобы дата находилась в распознанном формате.

Строки времени Строка времени может иметь любой из следующих форматов:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD

SQL как понял SQLite - функции даты и времени

Ваш лучший (самый простой) вариант - сохранить их в формате ГГГГ-ММ-ДД ЧЧ: ММ (т.е. изменитьSimpleDateFormat соответственно).

  • Обратите внимание, что вам даже не понадобится функция datetime, поскольку прямое сравнение значений приведет к желаемому результату.

  • Хранение значения метки времени Unix будет более эффективным с точки зрения времени хранения / обработки.

Затем можно использовать функцию strftime, чтобы вернуть дату в нужном формате.

В противном случае вы можете преобразовать значение хранилища в распознанный формат, используя функции SQL, такие как substr, а затем выполнить сравнение. SQL в понимании SQLite - основные функции

Вот пример того, как можно обрабатывать данные, хранящиеся в формате ДД ММГ ГГГГ ЧЧ: ММ, при условии, что значение для сравнения указано в ГГГГММДДЧЧ:Формат MM: -

DROP TABLE IF EXISTS Offline_Range;
CREATE TABLE IF NOT EXISTS Offline_Range (end_time);

-- Add some test data dd MMM yyyy HH:mm
INSERT INTO Offline_Range VALUES
    ('21 May 2018 10:30'),
    ('21 Jun 2018 10:30'),
    ('21 Jul 2018 10:30'),
    ('21 Aug 2018 10:30')
;
SELECT * FROM Offline_Range
    WHERE
        substr(end_time,8,4)||
        CASE
            WHEN instr(end_time,'Jan') THEN '01'
            WHEN instr(end_time,'Feb') THEN '02'
            WHEN instr(end_time,'Mar') THEN '03'
            WHEN instr(end_time,'Apr') THEN '04'
            WHEN instr(end_time,'May') THEN '05'
            WHEN instr(end_time,'Jun') THEN '06'
            WHEN instr(end_time,'Jul') THEN '07'
            WHEN instr(end_time,'Aug') THEN '08'
            WHEN instr(end_time,'Sep') THEN '09'
            WHEN instr(end_time,'Oct') THEN '10'
            WHEN instr(end_time,'Nov') THEN '11'
            WHEN instr(end_time,'Dec') THEN '12'
        END
        ||
        substr(end_time,1,2)||substr(14,5) 

            <  

        '2018062200:00' -- 22 Jun 2018 00:00 amended to suit i.e. the value input

Это создает таблицу: -

enter image description here

Результат запроса будет: -

enter image description here

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