2012-01-10 8 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 

Однако я нашел это на StackOverflow, который является правильным способом тянуть разницу точных месяцев между двумя датами:

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

Смежные вопросы