現在、オファーの周りにSQLクエリを作成中です。SQL - 範囲内のオファーを表示
基本的にオファーには開始日と終了日があります。
シナリオ1:ユーザーはからの日付のみを指定します。
解決策1:すべてのオファーは、その日以降に開始される表示です。
シナリオ2:ユーザーはTO日付のみを指定します。
解決策2:すべてのオファーは、指定された日付またはその前に終了する表示です。
シナリオ3:ユーザーは、検索するTO日付とFROM日付の両方を指定します。
解決策3の問題は次のとおりです。
オファー - 2012年1月1日から2012年3月3日
検索するには - 2012年1月1日から2012年2月2日
へのオファーはそれとしてクエリに返す必要があります2つの検索値の間に入ります。
私の現在のクエリは以下のとおりですが、必要に応じて機能しません。
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
こんにちはPatrik、その解決策の問題私は開始日だけを持つ検索基準を持つことができますか、または終了日を持つか、または期間がありますか? – swade1987
したがって、異なる検索条件が与えられた場合、これらのそれぞれのケースで何が起こるべきかを説明する必要があります。 – PatrikAkerstrand