sql >> Database teknologi >  >> RDS >> Sqlserver

Beregning af antal hele måneder mellem to datoer i SQL

Det originale indlæg havde nogle fejl... så jeg omskrev og pakkede det som en 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. Sådan fungerer UNHEX() i MariaDB

  2. Kan ikke finde et indgangspunkt med navnet 'InterlockedIncrement' i DLL 'kernel32.dll' - [email-beskyttet] 64 bit

  3. SQL Join på null-værdier

  4. MySQL-deltagelsesforespørgsel ved hjælp af like?