Запрос Sqlite для получения неопределенного месяца

#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 Я хочу месяцы