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
期待される出力は何ですか? –