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

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

Susan Sarandon
リリース: 2025-01-05 04:32:41
オリジナル
341 人が閲覧しました

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

SQL での日付間の満月の計算

SQL では、2 つの日付の差を計算するために DATEDIFF 関数がよく使用されます。ただし、この関数は、完全な月数ではなく、月単位の差を返します。 2 つの日付の間の完全な月数を決定するには、より具体的な計算が必要です。

UDF アプローチ

1 つのアプローチは、ユーザー定義関数 (UDF) を作成することです。 ) 2 つの日付の間の完全な月数を計算します。 FullMonthsSeparation という名前の関数は次のように記述されます。

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

使用例

FullMonthsSeparation 関数を使用するには、2 つの日付をパラメーターとして指定して呼び出すだけです。例:

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

この関数は、2 つの日付の間の完全な月数を返します。これは、開始日の日付が終了日よりも大きい可能性を考慮しており、その場合は結果から 1 か月が減算されます。

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

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