в формате 'Mon yy'.
Первая строка - первый месяц, вторая - второй. Нужно написать запрос, который будет выводить данные за период между первой и второй датой.
Сейчас работает такой запрос:
select summ, date from income
where date_part('year', date) >= date_part('year', to_date(%s, 'Mon yy')) and
date_part('month', date) >= date_part('month', to_date(%s, 'Mon yy')) and
date_part('year', date) <= date_part('year', to_date(%s, 'Mon yy')) and
date_part('month', date) <= date_part('month', to_date(%s, 'Mon yy'));
но выглядит он дико здоровым.
Подскажите, как можно сделать проще?
Почему бы данные пользователя не привести к типу date ? Тогда будет просто: WHERE date BETWEEN 'mon yy' and 'mon yy' ?
Если приводить, например, 'Oct 21' к типу date, получится 2021-10-01. Если пользователь выбирает два раза 'Oct 21', поиск будет между 2021-10-1 и 2021-10-1, что не даст нужного результата. Также и с 'Oct 21' и 'Nov 21'. Поэтому я и писал функции date_part, выделяя, что искать нужно именно между годом, месяцем первого запроса и годом, месяцем второго.
Ну так нормально же. Вам нужно первую дату включительно, а вторую не включительно и ко второй прибавлять месяц. То есть пользователь два раза вбил Oct 21, то запрос: WHERE date >= '2021-10-01' AND date < (2021-10-01 + INTERVAL '1 month')
Спасибо! Не знал о такой фишке.
Обсуждают сегодня