Ответы пользователя по тегу MySQL
  • Выборка диапазона дат по двум столбцам из MySQL?

    @S-a-n-d-r-0
    Дан некий текущий месяц.
    Событие попадает, если
    1) его начало в текущий месяце;
    2) его конец в текущий месяце;
    3) его начало в месяце<текущего И конец в месце >текущего.
    Всего три случая. Значит нужен WHERE (1 условие) OR (2е условие) OR (3 условие).
    • Первое условие выполняется, если (start_time >= 01.НужныйМесяц.НужныйГод) AND (start_time < 01.НужныйМесяц+1.НужныйГод)
    • Второе - по аналогии, но только уже с end_time.
    • Третье - (start_time < 01.НужныйМесяц.НужныйГод) AND (end_time >= 01.НужныйМесяц+1.НужныйГод)


    Вот пример, как это можно сделать. Только очень корявый, т.к. написан на SQLite. На MySQL будет чуток по-другому, но смысл тот же. Тестировал на https://www.jdoodle.com/execute-sql-online/
    create table tab(id int, start text, end text);
    
    /* YYYY-MM-DD */
    insert into tab values(1, '2019-09-10', '2019-09-12');
    insert into tab values(2, '2019-08-07', '2019-11-12');
    insert into tab values(3, '2018-05-12', '2018-06-12');
    insert into tab values(4, '2018-01-12', '2019-03-12');
    insert into tab values(5, '2019-08-10', '2019-09-12');
    insert into tab values(6, '2019-09-10', '2019-10-12');
    insert into tab values(7, '2019-08-10', '2019-10-05');
    insert into tab values(8, '2019-08-10', '2019-08-12');
    insert into tab values(9, '2019-07-10', '2019-08-12');
    insert into tab values(10, '2019-09-30', '2019-10-01');
    
    select * from tab WHERE ((date(start) >= date('2019-09-01')) AND (date(start) < date('2019-10-01'))) OR ((date(end) >= date('2019-09-01')) AND (date(end) < date('2019-10-01'))) OR ((date(start) < date('2019-09-01')) AND (date(end) >= date('2019-10-01')));
    Ответ написан
    Комментировать