2016-04-12 22 views
0

私は恐らく何かが分かりませんが、以下の関数が値を返さないのはなぜですか? SELECT * FROM dbo.Age( '2016-03-01'、 '2016-03-31')。年月日形式で年を返します。MS SQL 2012関数は値を返しません

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

期待される出力は何ですか? –

答えて

2
あなたが適切な値で、テーブルに最後に挿入を追加し、あなたが戻ってあなたのテーブルを取得する必要がある機能

内の任意の場所で@Stazテーブルに挿入されるように表示されません

+0

ありがとう、SCFi。フレッシュな表情で仕事ができます! –

関連する問題