Maison >base de données >tutoriel mysql >Comment calculer avec précision le nombre de mois complets entre deux dates en SQL ?

Comment calculer avec précision le nombre de mois complets entre deux dates en SQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-05 04:32:41346parcourir

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

Calcul de mois complets entre des dates en SQL

En SQL, la fonction DATEDIFF est couramment utilisée pour calculer la différence entre deux dates. Cependant, cette fonction renvoie la différence en mois et non le nombre de mois complets. Pour déterminer le nombre de mois complets entre deux dates, un calcul plus spécifique est nécessaire.

Approche UDF

Une approche consiste à créer une fonction définie par l'utilisateur (UDF ) qui calcule le nombre de mois complets entre deux dates. La fonction, nommée FullMonthsSeparation, s'écrit comme suit :

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

Exemple d'utilisation

Pour utiliser la fonction FullMonthsSeparation, appelez-la simplement avec les deux dates en paramètres. Par exemple :

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

Cette fonction renverra le nombre de mois complets entre les deux dates. Cela tient compte de la possibilité que la date de début puisse avoir un jour du mois plus grand que la date de fin, auquel cas un mois est soustrait du résultat.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn