0
之間
我目前正在構建圍繞優惠的SQL查詢。SQL - 顯示範圍在
基本上報價有一個開始和結束日期。
情況1:用戶只指定日期。
解決方案1:所有優惠都是在當天或之後開始的顯示。
情景2:用戶只指定TO日期。解決方案2:所有優惠都是在指定日期之前或之前顯示的。
場景3:用戶同時指定要搜索的TO和FROM日期。
解決方案3的問題如下。
優惠 - 從2012年1月1日至03-03-2012
搜索 - 從2012年1月1日至2012-02-02
的報價應在查詢中,因爲它返回落在兩個搜索值之間。
我目前的查詢是在下面,但它沒有按要求工作。
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 2012-04-17 09:45:57
嗨帕特里克,該解決方案的問題是我可以有搜索條件,只有一個開始日期或只有一個結束日期或有一段時間。 – swade1987 2012-04-17 09:48:09
因此,您需要解釋在給定不同搜索條件的情況下,每種情況會發生什麼情況。 – PatrikAkerstrand 2012-04-17 09:51:52