Check for leap year

Viewed 59161

How do I check if a year is a leap year?

I have this code:

declare @year int
set @year = 1968

SELECT CASE WHEN @YEAR = <LEAPYEAR> THEN 'LEAP YEAR' ELSE 'NORMAL YEAR' END

Expected result:

LEAP YEAR
8 Answers

Not sure how efficient this is compared to the other solutions. But is another option.

DECLARE @year int = 2016
SELECT CASE 
  WHEN DATEPART(dayofyear, DATEFROMPARTS(@year, 12, 31)) = 366
  THEN 'LEAP' 
  ELSE 'NOT LEAP' 
END

3 line... but could be also 2...

DECLARE @Y as int = 2021;
DECLARE @Dt as char(10) = CAST(@Y as CHAR(4)) + '-02-29'
SELECT IIF(isDATE(@Dt) = 1, 1,0)

or

DECLARE @Dt as char(10) = '2020-02-29'
SELECT IIF(isDATE(@Dt) = 1, 1,0)

Alen

There are different way you can find.

DEMO

DECLARE @year INT = 2024;

-- Date Cast
SELECT @year AS [Year],
    CASE WHEN ISDATE(CAST(@year AS CHAR(4)) + '0229') = 1
        THEN 'Leap Year'
    ELSE 'Not a Leap Year' END

-- Year divisible by 4 but not by 100 OR year divisible by 400
SELECT @year AS [Year],
    CASE WHEN (@year % 4 = 0 AND @year % 100 <> 0) OR (@year % 400 = 0)
        THEN 'Leap Year'
    ELSE 'Not a Leap Year' END

-- Find Month
SELECT @year As [Year],
    CASE WHEN MONTH(DATEADD(D, 1, DATEFROMPARTS(@Year, 2, 28))) <> 3 
        THEN 'Leap Year'
    ELSE 'Not a Leap Year' END

-- A Leap Year has 366 days (the extra day is the 29th of February).
SELECT  @year As [Year],
    CASE WHEN DATEPART(dy,DATEFROMPARTS(@year,12,31)) = 366
        THEN 'Leap Year'
    ELSE 'Not a Leap Year' END
Related