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