2015-08-30 2 views
2

Я пытаюсь проверить с помощью sql, если диапазон дат (с датой начала и окончания) находится в месяце (относительно года). Месяц и год задаются переменными (GET-переменные).Проверьте, существует ли диапазон дат в месяце (календарь)

Это мой стол:

+----+------+-------+-----+ 
| id | name | start | end | 
+----+------+-------+-----+ 

Поскольку назначение может быть только одна дата (начало и конец будет тот же день), я должен рассмотреть этот вопрос.

Мой запрос

SELECT 
    id, 
    name, 
    start, 
    end 
FROM appointments 
WHERE (MONTH(start) = ? AND YEAR(end) = ?) OR (MONTH(start) = ? AND YEAR(end) = ?) 
ORDER BY start 

Проблема с этим запросом является то, что он просто проверяет запуск месяц и конечный месяц не месяцы между ними. Например, если встреча длится более 5 месяцев, этот запрос завершается с ошибкой.

ответ

3

Если вы хотите узнать, находится ли определенный месяц в диапазоне, я бы предложил включить даты в формат YYYYMM. Это делает логику относительно легко выразить:

where ?*100 + ? between year(start)*100 + month(start) and 
         year(end)*100 + month(end) 
+0

Как я могу преобразовать даты в YYYYMM? Может быть, в запросе типа DATE_FORMAT (start, 'YYYYMM') AS start2'? Но это не работает. – Bernd

+0

@ Бернд. , , Это то, что делает арифметика. , , умножьте год 100 и добавьте месяц. Вы также можете использовать 'date_format()', потому что это будет работать как для строк, так и для чисел. –

Смежные вопросы