ホームページ > データベース > mysql チュートリアル > SQL Server で 2 つの日付の間の完全な月数を正確に計算するにはどうすればよいですか?

SQL Server で 2 つの日付の間の完全な月数を正確に計算するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-03 04:18:39
オリジナル
366 人が閲覧しました

How to Accurately Calculate the Number of Full Months Between Two Dates in SQL Server?

SQL Server 関数を使用した 2 つの日付間の完全な月数の計算

2 つの日付間の完全な月数の計算は、 SQL Server での課題。 DATEDIFF を使用した単純なアプローチでは、月の部分の違いのみが考慮されるため、正確な結果が得られない可能性があります。ここでは、FullMonthsSeparation という名前のカスタム 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
ログイン後にコピー

この UDF は、2 つの日時パラメーター @DateA と @DateB を受け取り、それらの間の完全な月数を計算します。 2 番目の日付が最初の日付よりも早い場合を処理します。 UDF の使用方法は次のとおりです。

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
ログイン後にコピー

UDF は、指定された日付の間の月数を正確に計算し、その月の日が考慮されるようにします。

以上がSQL Server で 2 つの日付の間の完全な月数を正確に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート