2016-04-12 11 views
0

Muhtemelen açık bir şeyleri kaçırıyorum, ancak neden aşağıdaki gibi bir işlev döndürmediğimi fark edemiyorum. SELECT * FROM dbo.Age ('2016-03-01', '2016-03-31'). Yaşları aylar ay biçiminde iade etmelidir.MS SQL 2012 İşlev hiçbir değer döndürüyor

CREATE FUNCTION [dbo].[Age] (@DateFrom DATETIME, @DateTo DATETIME) 
RETURNS @Staz TABLE (Years INT, Months INT, Days INT) 

AS 
BEGIN 
DECLARE @Years int, @Months int, @Days int 
IF DAY(@DateFrom)=1 and MONTH(@DateFrom)=1 and DAY(@DateTo)=31 and MONTH(@DateTo)=12 
BEGIN 
    IF YEAR(@DateFrom)=YEAR(@DateTo) 
    SET @Years = @Years + 1 
    ELSE 
    SET @Years = @Years + (YEAR(@DateTo) - YEAR(@DateFrom) + 1) 
END 
ELSE 
BEGIN 
    IF MONTH(@DateFrom)=MONTH(@DateTo) and YEAR(@DateFrom)=YEAR(@DateTo) 
    BEGIN 
    IF DAY(@DateFrom)=1 and DAY(DATEADD(day,1,@DateTo))= 1 
    SET @Months = @Months + 1 
    ELSE 
    BEGIN 
     SET @Days = @Days + Day(@DateTo) - Day(@DateFrom) + 1 
    END 
    END 
    ELSE 
    BEGIN 
    IF YEAR(@DateFrom)=YEAR(@DateTo) 
    BEGIN 
    SET @Months = @Months + (MONTH(@DateTo) - MONTH(@DateFrom) - 1) 
    END 
    ELSE 
    BEGIN 
    SET @Years = @Years + (YEAR(@DateTo) - YEAR(@DateFrom) - 1) 
    SET @Months = @Months + (12 - Month(@DateFrom) + Month(@DateTo) -1) 
       END 
    IF DAY(@DateFrom)= 1 
    SET @Months = @Months + 1 
    ELSE 
    IF DAY(@DateFrom)>1 
    BEGIN 
    DECLARE @TempData datetime 
    SET @TempData = DATEADD(month,1,DATEADD(day,1-DAY(@DateFrom),@DateFrom)) 
    SET @Days = @Days + DATEDIFF(day,@DateFrom,@TempData) 
    END 
    IF DAY(DATEADD(day,1,@DateTo))<>1 
    SET @Days = @Days + DAY(@DateTo) 
     IF DAY(DATEADD(day,1,@DateTo))=1 
    SET @Months = @Months+1 
    END 
END 

SET @Months = @Months + @Days/30 
SET @Days = @Days%30 
SET @Years = @Years + @Months/12 
SET @Months = @Months%12 

RETURN 
END 
+0

Beklenen çıktı nedir? –

cevap

2
Uygun değerlerle tabloya sonunda Bir ekleme ve birlikte geri tablo elde edilmelidir fonksiyonu

herhangi bir yerde @Staz tabloya ekleme gibi görünmüyor

değerler

+0

Teşekkür ederim, SCFi. Taze görünüm işi yapar! –