我目前正在围绕优惠构建一个 SQL 查询。
基本上,报价有开始和结束日期。
场景1:用户只指定一个日期。
解决方案 1:显示当天或之后开始的所有优惠。
场景 2:用户只指定一个 TO 日期。
解决方案 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 上方的查询中,这会导致问题。
史蒂文