sql дата в месячном промежутке времени - PullRequest
0 голосов
/ 12 августа 2011

У меня есть записи в моей таблице, такие как

uid / start / end / value

Теперь я хочу выбрать все записи, которые лежат в определенном месяце.Поэтому, если пользователь выбирает «Июнь», я хочу получить все записи, которые доступны в июне.Начало и конец сохраняются как метка времени (не могу изменить это).Я нашел что-то вроде:

WHERE month(start)=5

Это работает, но, к сожалению, дает только записи, которые начинаются в июне.Я могу, конечно, добавить то же самое для конца, но это все равно не поможет, если запись начинается в мае и заканчивается в июле.Конечно, я мог бы рассчитывать временные метки и сравнивать напрямую, но я хочу выбрать его для июня любого года, а не только для одного конкретного.Я думал о чем-то вроде:

WHERE month(start) <= 5 && month(end) >= 5

, который отлично работал бы с метками времени, но, очевидно, это имеет проблему с перерывами на год.

Есть ли хорошее решение сделать это без расчетавсе временные метки на следующие годы и создание больного большого запроса?

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

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

Вы также можете перефразировать его как:

where  start <= 1 Jun 2011 
and    end >= 1 Jul 2011
0 голосов
/ 12 августа 2011

Хорошо, я понял это:

WHERE month(start)=5
OR month(end)=5
OR ( month(start)<=5 AND month(end) >= 5)
OR ( month(start)<=5 AND year(start)<year(end))
OR ( month(end)>=5 AND year(start)<year(end))

Я думаю, что это правильно и отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...