我在这个过程中苦苦挣扎。
如果是周一到周四,我希望所有的事情都提前90天;
SELECT
PR.ClientID
,PR.NewDealEndDate
INTO
#OriginalRenewalDetails
FROM
Shiva.dbo.ProductRemortgage PR WITH (NOLOCK)
LEFT JOIN Shiva.dbo.ClientLead AS CL WITH (NOLOCK)
ON CONVERT(VARCHAR(50), CL.OriginatorReferenceID) = CONVERT(VARCHAR(50), PR.ClientID)
WHERE -- 90 days from now.
PR.NewDealEndDate = DATEADD(dd, 90, DATEDIFF(dd, 00, GETDATE()))
AND CL.ClientID IS NULL但是,如果是星期天,我希望在Where子句中更改以下内容。这样我也能得到周五和周六的结果。
WHERE -- 90 days from now.
PR.NewDealEndDate BETWEEN DATEADD(dd, 88, DATEDIFF(dd, 00, GETDATE())) AND DATEADD(dd, 90, DATEDIFF(dd, 00, GETDATE()))
AND CL.ClientID IS NULL我找不到一种有效的方法来做这件事。感谢您的帮助。
发布于 2012-05-21 22:45:28
这里不需要动态SQL或两个单独的查询。将**DAY = SUNDAY**部件替换为您当前用于确定日期是星期天的逻辑:
WHERE PR.NewDealEndDate BETWEEN DATEADD(DAY,
CASE WHEN **DAY = SUNDAY** THEN 88 ELSE 90 END,
DATEDIFF(DAY, 0, GETDATE())) AND DATEADD(DAY, 90, DATEDIFF(dd, 0, GETDATE()))
AND CL.ClientID IS NULL;你也可以预先计算出范围,例如
DECLARE @start SMALLDATETIME, @end SMALLDATETIME;
SET @end = DATEADD(DAY, 90, DATEDIFF(DAY, 0, GETDATE()));
SET @start = CASE WHEN **DAY = SUNDAY** THEN DATEADD(DAY, -2, @end) ELSE @end END;
WHERE PR.NewDealEndDate BETWEEN @start END @end
AND CL.ClientID IS NULL;发布于 2012-05-21 22:26:04
使用IF。
伪:
if day = sunday
begin
select with 88
end
else
begin
select with 90
end或者将WHERE子句更改为类似以下内容:
WHERE (PR.NewDealEndDate = DATEADD(dd, 90, DATEDIFF(dd, 00, GETDATE()))
AND CL.ClientID IS NULL AND Datepart(weekday, getdate()) <> 1)
OR
(PR.NewDealEndDate BETWEEN DATEADD(dd, 88, DATEDIFF(dd, 00, GETDATE()))
AND DATEADD(dd, 90, DATEDIFF(dd, 00, GETDATE()))
AND CL.ClientID IS NULL
AND Datepart(weekday, getdate()) = 1)发布于 2012-05-21 22:35:30
您可以执行以下操作:
SELECT PR.ClientID
, PR.NewDealEndDate
INTO #OriginalRenewalDetails
FROM Shiva.dbo.ProductRemortgage PR WITH (NOLOCK)
LEFT JOIN Shiva.dbo.ClientLead AS CL WITH (NOLOCK)
ON CONVERT(VARCHAR(50), CL.OriginatorReferenceID) = CONVERT(VARCHAR(50), PR.ClientID)
WHERE CL.ClientID IS NULL
AND
(
(
PR.NewDealEndDate = DATEADD(dd, 90, DATEDIFF(dd, 00, GETDATE()))
AND Datepart(weekday, getdate()) <> 1 -- 1 is Sunday
)
OR
(
PR.NewDealEndDate BETWEEN DATEADD(dd, 88, DATEDIFF(dd, 00, GETDATE()))
AND DATEADD(dd, 90, DATEDIFF(dd, 00, GETDATE()))
AND Datepart(dayofweek, getdate()) = 1
)
)https://stackoverflow.com/questions/10687097
复制相似问题