Вы можете использовать
ORDER BY (substr(sell_date,7,4)||substr(sell_date,1,2)||substr(sell_date,4,2));
Это потребует строгого соблюдения ММ / дд / гггг, равного 01,02 ..... как для части дня, так и для части месяца (например, 1/1 /2018 год не будет работать должным образом).
Однако гораздо лучше хранить даты в одном из распознанных форматов, который можно просто отсортировать, и дополнительно позволяет управлять датами с помощью встроенных функций даты и времени, таких каккак strftime (и это потому, что дата не в переработанном формате, что strftime('%m', sell_date )
не работает для вас) .
Вы могли бы использовать strftime('%m',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2))
вместо strftime('%m', sell_date )
(опять же, только если было строгое соблюдение ММ / дд / гггг)
Что касается еженедельных, вы можете использовать% W, чтобы получить неделю в году, если это то, чтоВы имеете в виду еженедельно.Опять же, если дата в распознанном формате, поэтому strftime('%W',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2))
вернет неделю в году.
Применяя оба, вы можете использовать: -
ORDER BY
(substr(sell_date,7,4)||substr(sell_date,1,2)||substr(sell_date,4,2)),
strftime('%W',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2))
SQL AsРазбирается в SQLite - Функции даты и времени .
Пример
Рассмотрим следующее, которое дает два результата.Первый Выбор всех строк (3 вставляются с датами 10/14/2018 (неделя 41), 09/12/2018 (неделя 37) и 13.11.2008 (неделя 46) в порядке, как ожидается (по месяцам, а затем по неделям)).
Для иллюстрации создаются столбцы, которые показывают месяц и неделю года. Столбец недели также используется во втором запросе для выбора строк, которые соответствуют неделе (неделя 37 или 12.09.2008).): -
DROP TABLE IF EXISTS table1;
CREATE TABLE IF NOT EXISTS table1 (sell_date TEXT);
INSERT INTO table1 VALUES ('10/14/2018'),('09/12/2018'),('11/13/2018');
SELECT *,
strftime('%m',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2)) AS month,
strftime('%W',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2)) AS week
FROM table1
ORDER BY
(substr(sell_date,7,4)||substr(sell_date,1,2)||substr(sell_date,4,2)),
strftime('%W',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2))
;
SELECT *,
strftime('%m',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2)) AS month,
strftime('%W',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2)) AS week
FROM table1
WHERE CAST(week AS INTEGER) = 37
ORDER BY
(substr(sell_date,7,4)||substr(sell_date,1,2)||substr(sell_date,4,2)),
strftime('%W',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2))
Первый запрос приводит к: -

Второй, с предложением WHERE (приведениезначение INTEGER), которое выбирает строки в соответствии с определенной неделей в году, в результате: -

Теперь, если даты были сохранены враспознанный формат (ГГГГ-ММ-ДД), тогда выше будет проще: -
DROP TABLE IF EXISTS table2;
CREATE TABLE IF NOT EXISTS table2 (sell_date TEXT);
INSERT INTO table2 VALUES ('2018-10-14'),('2018-09-12'),('2018-11-13');
SELECT *, strftime('%m',sell_date), strftime('%W',sell_date)
FROM table2
ORDER BY sell_date, strftime('%W',sell_date)
;
SELECT *, strftime('%m',sell_date), strftime('%W',sell_date)
FROM table2
WHERE CAST(strftime('%W',sell_date) AS INTEGER) = 37
ORDER BY sell_date, strftime('%W',sell_date)**strong text**