В настоящее время я работаю над созданием запроса SQL по предложениям.SQL - Показать предложения между диапазонами
В основном предложение имеет дату начала и окончания.
Сценарий 1: Пользователь указывает только дату.
Решение 1: Все предложения - это отображение, которое начинается или проходит в этот день.
Сценарий 2: Пользователь указывает только дату ТО.
Решение 2: Все предложения - это отображение, которое заканчивается или до указанной даты.
Сценарий 3: Пользователь указывает дату TO и FROM для поиска.
Проблема с решением 3 заключается в следующем.
предложение - от 01.01.2012 до 03.03.2012
ПОИСК - от 01.01.2012 до 02.02.2012
Предложение должно вернуться в запросе, как это падает между двумя значениями поиска.
Мой текущий запрос ниже, однако он не работает по мере необходимости.
CREATE PROCEDURE [dbo].[GetAllOffers]
@retailer_id BIGINT,
@opt_in BIGINT,
@use_once BIGINT,
@from_date DATETIME,
@to_date DATETIME
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET NOCOUNT ON;
SELECT retr.Name,
reco.Headline,
reco.isOptIn,
reco.isUseOnce,
reco.DateValidFrom,
reco.DateExpires,
reco.Id AS OfferId
FROM RetailerCoupon reco
INNER JOIN Retailer retr
ON reco.RetailerId = retr.Id
WHERE (reco.RetailerId = @retailer_id
OR @retailer_id IS NULL)
AND (reco.isOptIn = @opt_in
OR @opt_in IS NULL)
AND (reco.isUseOnce = @use_once
OR @use_once IS NULL)
AND (reco.DateValidFrom >= @from_date
OR @from_date IS NULL)
AND (reco.DateExpires <= @to_date
OR @to_date IS NULL)
ORDER BY retr.Name
END
GO
Пожалуйста, обратите внимание, сценарии 1 & 2 охватываются запросом выше его 3, который является причиной проблемы.
Стивен
Проверьте эту дискуссию о том, как выбрать строки с диапазоном дат в даты диапазон: http://stackoverflow.com/questions/730722/how-to-determine-if-a-date-range-occurs-any-time-within-another-date-range – PatrikAkerstrand
Привет, Патрик, проблема с этим решением есть ли у меня критерии поиска, которые имеют только дату начала или имеют только дату окончания ИЛИ имеет период времени. – swade1987
Итак, вам нужно объяснить, что должно произойти для каждого из этих случаев, учитывая разные критерии поиска. – PatrikAkerstrand