#android #sqlite
#Android #sqlite
Вопрос:
Есть ли какой-либо запрос sqlite для получения неопределенного месяца.
Если у меня есть запись в базе данных 1 января 2014
и следующая запись
1 Декабря 2014
могу ли я получить все месяцы за этот период. т.е. С февраля 2014 по ноябрь 2014
Заранее спасибо!!
Это моя функция, которая возвращает мне месяц и год всех моих записей
public String[] getmonthsmood()
{
String result[]=null;
try
{
int i = 0;
appDatabase = SQLiteDatabase.openDatabase(strmyPath, null, SQLiteDatabase.OPEN_READWRITE);
String selectQuerry = "SELECT distinct strftime('%Y-%m',dateadded) FROM Mood_diary ORDER BY dateadded";
Cursor cursor = appDatabase.rawQuery(selectQuerry, null);
// int result=cursor.getCount();
result = new String[cursor.getCount()];
if (cursor.moveToFirst())
{
do
{
// result.add(cursor.getString(0));
result[i] = cursor.getString(0);
i ;
}
while (cursor.moveToNext());
}
return result;
}
catch (Exception e)
{
e.printStackTrace();
}
return result;
}
В моей базе данных sqlite я помещаю одну запись в виде строки и даты в столбец Comment и dateadded.
Комментарии:
1. Какой формат имеют эти значения?
2. Привет — какие запросы вы пробовали и почему результаты были неудовлетворительными? Что вы искали в Google (чтобы нам не пришлось дублировать усилия, которые вы уже приложили для решения этой проблемы)?
3. Что не так с
for (m = 1; m <= 12; m )
?
Ответ №1:
Вы можете попробовать это:
WITH RECURSIVE months(m) AS (
VALUES(1)
UNION
SELECT m 1 FROM months LIMIT 12
)
SELECT y || '-' || m AS yearmonth
FROM (SELECT CASE WHEN m < 10 THEN '0' || m ELSE m END AS m FROM months),
(SELECT DISTINCT STRFTIME('%Y', dateadded) AS y FROM Mood_diary)
WHERE yearmonth > (SELECT MIN(STRFTIME('%Y-%m', dateadded)) FROM Mood_diary) AND
yearmonth < (SELECT MAX(STRFTIME('%Y-%m', dateadded)) FROM Mood_diary) AND
yearmonth NOT IN (SELECT (STRFTIME('%Y-%m', dateadded)) FROM Mood_diary)
ORDER BY yearmonth
;
Ответ №2:
Чтобы найти все даты между двумя датами :
SELECT distinct strftime('%Y-%m',dateadded) FROM Mood_diary WHERE dateadded between '2014-01-01' AND '2014-12-01' ORDER BY dateadded;
Убедитесь, что даты, которые вы сохраняете, указаны в YYYY-MM-DD
формате. Это то, что понимает sqlite.
Комментарии:
1. Это возвращает значения, которые существуют в базе данных.
2. итак, о чем спрашивается вопрос? количество месяцев между двумя датами. Наверное, я неправильно понял вопрос.
3. Исправьте @CL. Мне нужны значения, которых нет в базе данных
4. Я думаю, вам следует добавить это к вопросу. Кроме того, вы хотите напечатать месяцы или количество месяцев?
5. @ShivamVerma Я хочу месяцы