2012-01-10 157 views
0

道歉的大规模愚蠢的问题,但我很好奇如何得到这个工作。目前我有一个查询来查找我需要根据两个日期之间的月份差异来更改的一些记录。如何结合两个sql脚本?

SELECT [MembershipTermID] 
    ,[MemberStatusProgKey] 
    ,[StartDate] 
    ,[EndDate] 
    ,[AdditionalDiscount] 
    ,[EntryDateTime] 
    ,[UpdateDateTime] 
    ,[MembershipID] 
    ,[AgentID] 
    ,[PlanVersionID] 
    ,[ForceThroughReference] 
    ,[IsForceThrough] 
    ,[NextTermPrePaid] 
    ,[IsBillingMonthly] 
    ,[CICSMEMBERNUM] 
    ,[CICSHISTORY] 
    ,[TMPSeqNoColumn] 
    ,[LastPaymentDate] 
    ,[PaidToDate] 
    ,[IsIndeterminate] 
    ,DATEDIFF(MONTH, PaidToDate, GETDATE()) as MonthsDifference 
FROM [Apollo].[dbo].[MembershipTerm] 
WHERE MemberStatusProgKey='DORMANT' AND IsBillingMonthly=1 AND DATEDIFF(MONTH, PaidToDate, GETDATE()) > 2 

但是我发现这个计算器上是拉两个日期之间的确切差几个月的正确方法:

CREATE FUNCTION FullMonthsSeparation 
(
@DateA DATETIME, 
@DateB DATETIME 
) 
RETURNS INT 
AS 
BEGIN 
DECLARE @Result INT 

DECLARE @DateX DATETIME 
DECLARE @DateY DATETIME 

IF(@DateA < @DateB) 
BEGIN 
    SET @DateX = @DateA 
    SET @DateY = @DateB 
END 
ELSE 
BEGIN 
    SET @DateX = @DateB 
    SET @DateY = @DateA 
END 

SET @Result = (
          SELECT 
          CASE 
            WHEN DATEPART(DAY, @DateX) > DATEPART(DAY, @DateY) 
            THEN DATEDIFF(MONTH, @DateX, @DateY) - 1 
            ELSE DATEDIFF(MONTH, @DateX, @DateY) 
          END 
          ) 

RETURN @Result 
END 
GO 

我怎样才能将它们组合起来,所以我基本上是计算满月差但从WHERE子句部分?

回答

3

一旦你在你的FullmonthsSeperation功能的数据库运行,你只需要调用它像这样:

SELECT [MembershipTermID] 
    ,[MemberStatusProgKey] 
    ,[StartDate] 
    ,[EndDate] 
    ,[AdditionalDiscount] 
    ,[EntryDateTime] 
    ,[UpdateDateTime] 
    ,[MembershipID] 
    ,[AgentID] 
    ,[PlanVersionID] 
    ,[ForceThroughReference] 
    ,[IsForceThrough] 
    ,[NextTermPrePaid] 
    ,[IsBillingMonthly] 
    ,[CICSMEMBERNUM] 
    ,[CICSHISTORY] 
    ,[TMPSeqNoColumn] 
    ,[LastPaymentDate] 
    ,[PaidToDate] 
    ,[IsIndeterminate] 
    ,DATEDIFF(MONTH, PaidToDate, GETDATE()) as MonthsDifference 
FROM [Apollo].[dbo].[MembershipTerm] 
WHERE MemberStatusProgKey='DORMANT' 
AND IsBillingMonthly=1 
AND dbo.FullMonthsSeparation (PaidToDate, GETDATE()) > 2 
+0

非常感谢您StevieG,正是我一直在寻找。 – shicky 2012-01-10 14:49:06