У меня есть таблица с именем, в Product_Sales
которой хранятся такие данные
Product_ID | Sold_by | Qty | From_date | To_date
-----------+---------+-----+------------+-----------
3 | 12 | 7 | 2013-01-05 | 2013-01-07
6 | 22 | 14 | 2013-01-06 | 2013-01-10
8 | 11 | 9 | 2013-02-05 | 2013-02-11
Каков теперь запрос, если я хочу выбрать данные о продажах между двумя датами из диапазона дат?
Например, я хочу выбрать данные о продажах с 2013-01-03
по 2013-01-09
.
Ответы:
Как видите, есть два способа добиться цели:
Очевидно, второй способ намного проще (всего два случая против четырех).
Ваш SQL будет выглядеть так:
источник
WHERE NOT
условие, переключение операторов и добавление равного также выполняет свою работу:SELECT * FROM Product_sales WHERE From_date <= @RangeTill OR To_date >= @RangeFrom
Вы должны охватить все возможности. From_Date или To_Date могут находиться между вашим диапазоном дат или даты записи могут охватывать весь диапазон.
Если одна из
From_date
илиTo_date
находится между датами, илиFrom_date
меньше даты начала иTo_date
больше даты окончания; тогда эта строка должна быть возвращена.источник
Попробуйте выполнить следующий запрос, чтобы получить даты между диапазоном:
источник
start_date
но закончились междуstart_date
иend_date
. С другой стороны, вопрос недостаточно ясен, я думаю, мы не имеем ни малейшего понятия, должны ли мы принимать продажи, которые находятся строго между заданными датами или датами, которые частично включают диапазон дат, но могут распространяться на одну или другую сторону или на оба? Так что основная проблема в том, что вопрос не ясен.источник
источник
Это покрывает все условия, которые вы ищете.
источник
Пожалуйста попробуйте:
источник
Только мои 2 цента, я считаю использование формата «dd-MMM-yyyy» самым безопасным, поскольку сервер db будет знать, что вы хотите, независимо от региональных настроек на сервере. В противном случае вы можете столкнуться с проблемами на сервере с региональными настройками даты как yyyy-dd-mm (по какой-либо причине).
Таким образом:
У меня это всегда хорошо работало ;-)
источник
Это работает на SQL_Server_2008 R2
источник
источник
Проверьте этот запрос, я создал этот запрос, чтобы проверить, совпадает ли дата заезда с датами бронирования.
это приведет к повторному запуску перекрывающихся деталей, чтобы получить неперекрывающиеся детали, а затем удалите «НЕ» из запроса.
источник
Этот запрос поможет вам:
источник
источник
Вы также можете попробовать использовать следующие фрагменты:
источник
Это просто, используйте этот запрос, чтобы найти данные из диапазона дат между двумя датами.
источник
Вы должны сравнивать даты в sql так же, как вы сравниваете числовые значения,
источник
Вот запрос, чтобы найти все продажи продуктов, которые были запущены в течение августа.
Также добавляет оператор case для проверки запроса
источник
источник
это просто, используйте этот запрос, чтобы найти то, что вам нужно.
источник