Сравнение дат (хранимых как строка) в базе данных android sqlite?

Я храню даты как String в моей базе данных в этом формате:

 YYYY-MM-DD HH:MM:SS 

Который является одним из поддерживаемых форматов ( http://www.sqlite.org/lang_datefunc.html ). Теперь я хочу сравнить эти сохраненные даты (ну, строки) с другими датами. Мои даты хранятся в столбце column_date , поэтому я пытаюсь это сделать:

 SELECT * FROM MyTable WHERE (Date(column_date) >= Date (2000-01-01) AND Datetime(column_date) <= Datetime (2050-01-01)) 

Когда я читаю документацию, функции The date and time functions use a subset of IS0-8601 date and time formats. The date() function returns the date in this format: YYYY-MM-DD. The date and time functions use a subset of IS0-8601 date and time formats. The date() function returns the date in this format: YYYY-MM-DD. Поэтому я полагаю, что я делаю это правильно – я создаю дату из сохраненной строки и сравниваю ее с датой, созданной из других строк.

Но это не работает, даже когда column_date является датой с этого года, и, как вы можете видеть, даты начала и окончания очень доброжелательны. Пробовал также это (используется дата-время вместо даты):

 SELECT * FROM MyTable WHERE (datetime(column_date) >= Date (2000-01-01) AND datetime(column_date) <= Datetime (2050-01-01)) 

И это (используйте вместо <= и> =)

 SELECT * FROM MyTable WHERE (Date(column_date) between Date (2000-01-01) AND Datetime (2050-01-01)) 

И все другие возможные комбинации. Что, черт возьми, я делаю неправильно, я глупый, или документальная ложь, или я пропустил что-то очень важное? Попытка найти решение несколько часов, но ничего не работает …

Solutions Collecting From Web of "Сравнение дат (хранимых как строка) в базе данных android sqlite?"

Если вы сохраняете даты как строки в формате

 YYYY-MM-DD HH:mm:ss 

====> то ваше поле даты является типом данных DateTime

Таким образом, вы должны использовать такой запрос

 select * from MyTable where mydate >= Datetime('2000-01-01 00:00:00') and mydate <= Datetime('2050-01-01 23:00:59') 

Вы также можете использовать фрагмент, указанный @Joop Eggen, с th между оператором – это тот же самый подход.

Оператор BETWEEN логически эквивалентен паре сравнений. «X BETWEEN y AND z» эквивалентно «x> = y AND x <= z», за исключением того, что с BETWEEN выражение x оценивается только один раз. См. Документы sqlite3

 SELECT * FROM MyTable WHERE column_date BETWEEN '2000-01-01 00:00:00' AND '2050-01-01 23:00:59' 

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

Ошибка была отсутствующей частью времени или не выполняла только субстрат только в части даты. И тогда функции преобразования данных / времени могут давать неправильные вещи.

Я думаю, что ваша проблема здесь …

 AND Datetime(column_date) <= Datetime (2050-01-01)) 

Почему вы используете Datetime здесь вместо Date?

Попробуй это:

 SELECT * FROM MyTable WHERE (Date(column_date) >= Date (2000-01-01) AND Date(column_date) <= Date (2050-01-01)) 

Дата, поданная в таблице SQLite, будет TEXT, а данные даты должны храниться как формат «2012-12-31 00:12:00», что сравнительная доза не дает вам проблем, и если мы считаем, что поля – date_from и date_to, и мы сохраняем Текущую дату на to_date, тогда мы должны получить текущую дату ниже и

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String to_date = sdf.format(new Date()); 

И SQL-запрос должен быть

  crs = db.rawQuery( "SELECT _id, date_from, date_to, done_or_not, list_name " + "FROM list_tbl " + "WHERE " + "date_from <= Datetime('"+to_date+"') AND date_to >= Datetime('"+to_date+"')", null); 

Сравнение дат (хранится как строка) в базе данных android SQLite. Используйте дату в формате 12/07/2015 и используйте такой запрос:

 SELECT * FROM tableName WHERE Date >=('12/07/2015') and appointmentDate <('13/07/2015')"; 

Это работает для меня.