sql >> データベース >  >> RDS >> Sqlserver

SQLでの2つの日付間の完全な月数の計算

    元の投稿にはいくつかのバグがありました...それで私はそれを書き直してUDFとしてパッケージ化しました。

    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
    
    SELECT dbo.FullMonthsSeparation('2009-04-16', '2009-05-15') as MonthSep -- =0
    SELECT dbo.FullMonthsSeparation('2009-04-16', '2009-05-16') as MonthSep -- =1
    SELECT dbo.FullMonthsSeparation('2009-04-16', '2009-06-16') as MonthSep -- =2
    


    1. null値でのSQL結合

    2. Oracleで小文字を含む行を見つける4つの方法

    3. PostgreSQLで行のバイトサイズを見つける

    4. PostgreSQL範囲タイプでのNULLと`無限大`