Получение последних 12 часов записей SQLite

Я пытаюсь получить записи за последние 12 часов из базы данных SQLite с Android.

Мне было интересно, возможно ли это?

Мой формат даты "yyyy-MM-dd HH:mm:ss.SSS" с использованием простого формата даты.

У меня есть столбец CREATED_AT в моей таблице, который имеет тип TEXT.

Я зашел так далеко:

SELECT * FROM " + ENTRIES_TABLE + " WHERE " + CREATED_AT + ..."

Кроме того, имеет ли значение, что столбец CREATED_AT имеет тип TEXT, а не дату и время?

Спасибо


person Community    schedule 30.04.2014    source источник
comment
если ваша строка совпадает, то не имеет значения, делаете ли вы =, но ваш код не объясняет это правильно. Хотя тоже не очень хорошая идея. Что произойдет, если вы захотите сделать less than или between   -  person Scary Wombat    schedule 30.04.2014
comment
Вам следует изучить возможность хранения CREATED_AT в качестве временной метки UNIX с использованием sqlite INTEGER вместо STRING. Вы прочитаете значение в своем коде, используя длинную переменную. Это не дает прямого ответа на ваш вопрос, но поможет в сравнении в будущем.   -  person ugo    schedule 30.04.2014
comment
Вы также должны рассмотреть вопрос о принятии ответов на ваши прошлые вопросы.   -  person ugo    schedule 30.04.2014
comment
Связано: stackoverflow.com/a/13694823/544198   -  person PearsonArtPhoto    schedule 30.04.2014


Ответы (2)


SQLite использует динамическую типизацию; не имеет значения, объявлен ли столбец как TEXT, DATETIME или FLUFFY BUNNIES.

Формат даты SQLite разработан таким образом, чтобы сравнение строк работало корректно. Чтобы вычесть 12 часов из метки времени, используйте одну из встроенных функций даты:

SELECT *
FROM Entries
WHERE CreatedAt >= datetime('now', '-12 hours')

(Функции даты SQLite по умолчанию используют UTC; убедитесь, что значения вашей таблицы не используют какой-либо местный часовой пояс.)

person CL.    schedule 30.04.2014

Как текстовое поле, вы не можете многое сделать. На самом деле, ваш единственный вариант, который работает все время без особых усилий, — это анализировать данные и делать это вручную. Болезненный маршрут будет смотреть на сравнение строк напрямую, но это усложняется, если вы имеете дело, скажем, с 1 января до полудня.

Гораздо лучший и действительно лучший способ работать с датами в sqlite — использовать метку времени Unix. Тогда было бы просто выбрать что-нибудь с отметкой времени больше, чем текущее время минус 12 часов, и все готово.

person PearsonArtPhoto    schedule 30.04.2014