Кажется, я не могу получить надежные результаты от запроса к базе данных sqlite, используя строку datetime в качестве сравнения следующим образом:
select *
from table_1
where mydate >= '1/1/2009' and mydate <= '5/5/2009'
как мне обрабатывать сравнение datetime с sqlite?
обновление: поле mydate - это тип данных DateTime
mydate
столбце? Я предполагаю, что это не один из поддерживаемых SQLite форматов: sqlite.org/lang_datefunc.html'2009-11-13'
для mydate будет меньше чем'2009-11-13 00:00:00'
.)Datetime()
же самое, что @Brad включил в свое упоминание решения. В противном случае VS2012 жалуется. Спасибо, Брэд.Ответы:
SQLite не имеет выделенных типов datetime , но имеет несколько функций datetime . Следуйте форматам строкового представления (на самом деле только форматы 1-10), понятным этим функциям (сохраняя значение в виде строки), и затем вы можете их использовать, плюс лексикографическое сравнение строк будет соответствовать сравнению даты и времени (если вы этого не сделаете). попробуйте сравнить даты со временем или дату со временем, что в любом случае не имеет большого смысла).
В зависимости от того, какой язык вы используете, вы можете даже получить автоматическое преобразование . (Что не относится к сравнениям в операторах SQL, подобных примеру, но облегчит вашу жизнь.)
источник
date
иdatetime
date
(илиdatetime
) в столбце, который внутренне обрабатывается какtext
. Это соответствует моим потребностям.Чтобы решить эту проблему, я храню даты как
YYYYMMDD
. Таким образом,where mydate >= '20090101' and mydate <= '20050505'
Он просто РАБОТАЕТ все время. Вам может потребоваться только написать синтаксический анализатор, чтобы обрабатывать, как пользователи могут вводить свои даты, чтобы вы могли преобразовать их в
YYYYMMDD
.источник
Недавно у меня была такая же проблема, и я решил ее так:
источник
strftime
в предложении WHERE, как в этом примере, и у меня есть вопрос: эффективно ли это использоватьstrftime
? Он оценивается один раз для каждой строки или один раз для запроса?При использовании SQLite у меня отлично работает следующее:
источник
Sqlite не может сравнивать по датам. нам нужно преобразовать в секунды и привести его как целое число.
пример
источник
Следующее сработало для меня.
источник
У меня есть ситуация, когда мне нужны данные за два дня назад и до конца сегодняшнего дня. Я пришел к следующему.
Хорошо, технически я также прибегаю к полуночи завтра, как исходный плакат, если были какие-то данные, но все мои данные исторические.
Главное, что нужно помнить, из первоначального плаката были исключены все данные после 00:00:00 15.11.2009. Таким образом, любые данные, записанные в полночь 15-го числа, были включены, но данные после полуночи 15-го числа не были включены . Если их запрос был,
Использование предложения между для ясности.
Было бы немного лучше. Он по-прежнему не учитывает високосные секунды, в которых в часе может быть больше 60 секунд, но этого достаточно для обсуждения здесь :)
источник
Мне пришлось хранить время с информацией о часовом поясе, и я смог получить запросы, работающие в следующем формате:
Время хранится в базе данных как обычный ТЕКСТ в следующем формате:
источник
Ниже приведены методы сравнения дат, но перед этим нам нужно определить формат даты, хранящейся в БД.
У меня есть даты, хранящиеся в формате ММ / ДД / ГГГГ ЧЧ: ММ, поэтому их нужно сравнивать в этом формате
Ниже запрос сравнивает преобразованную дату в формат ММ / ДД / ГГГ и получает данные за последние пять дней до сегодняшнего дня. Оператор BETWEEN поможет, и вы можете просто указать дату начала И дату окончания.
В запросе ниже будет использоваться оператор "больше" (>).
Все вычисления, которые я сделал, используют текущее время, вы можете изменить формат и дату в соответствии с вашими потребностями.
Надеюсь, что это поможет вам
Summved
источник
Вы также можете написать свои собственные пользовательские функции для обработки дат в выбранном вами формате. В SQLite есть довольно простой метод написания собственных пользовательских функций. Например, я написал несколько, чтобы сложить продолжительность.
источник
Свой запрос я сделал следующим образом:
Я получил подсказку от ответа @ifredy. Все, что я сделал, это то, что я хотел, чтобы этот запрос выполнялся в iOS с использованием Objective-C. И это работает!
Надеюсь, что тот, кто занимается разработкой для iOS, тоже воспользуется этим ответом!
источник
Прямо сейчас я разрабатываю с помощью пакета NuGet System.Data.SQlite (версия 1.0.109.2). Что с использованием SQLite версии 3.24.0.
И у меня это работает.
Я не собираюсь использовать функцию datetime (). Возможно, они уже обновили SQL-запрос в этой версии SQLite.
источник