I have this co-worker who is obsessed about leap year. This post is dedicated to him.
There are various ways to determine if a given year is a leap year. The first function here is using the various SQL Date functions to get the job done.
-------------------------------------------------
-- Does the function already exist?
-- if so... drop it.
-------------------------------------------------
IF OBJECT_ID( N'dbo.xIsLeapYear',N'FN' ) IS NOT NULL
BEGIN
print 'Function found... Dropping'
DROP FUNCTION dbo.xIsLeapYear
END
GO
CREATE FUNCTION xIsLeapYear(@Year SmallInt)
RETURNS CHAR(3)
AS
-------------------------------------------------
--Function will Check to See if the year
--passed in is a leap year.
--
--This function uses SQL Server Date functions
--to get the job done.
--
--You pass in a Year and it returns 'Yes' or 'No'
-------------------------------------------------
BEGIN
DECLARE @Date DateTime
DECLARE @Result Char(3)
-- Turn the Passed in year to Feb 28th
SET @Date = Convert( Varchar(4), @Year ) + '0228'
-- Add one Day to the date
SET @Date = DateAdd( d, 1, @Date )
-- Is the @date variable still February?
IF ( DatePart(M, @date) = 2 )
BEGIN
SET @Result = 'Yes'
END
ELSE
BEGIN
SET @Result = 'NO'
END
RETURN @Result
END
GO
BEGIN
print 'Function found... Dropping'
DROP FUNCTION dbo.xIsLeapYear
END
GO
CREATE FUNCTION xIsLeapYear(@Year SmallInt)
RETURNS CHAR(3)
AS
-------------------------------------------------
--Function will Check to See if the year
--passed in is a leap year.
--
--This function uses SQL Server Date functions
--to get the job done.
--
--You pass in a Year and it returns 'Yes' or 'No'
-------------------------------------------------
BEGIN
DECLARE @Date DateTime
DECLARE @Result Char(3)
-- Turn the Passed in year to Feb 28th
SET @Date = Convert( Varchar(4), @Year ) + '0228'
-- Add one Day to the date
SET @Date = DateAdd( d, 1, @Date )
-- Is the @date variable still February?
IF ( DatePart(M, @date) = 2 )
BEGIN
SET @Result = 'Yes'
END
ELSE
BEGIN
SET @Result = 'NO'
END
RETURN @Result
END
GO
-------------------------------------------------
--Now we will check to see if the code works
-------------------------------------------------
PRINT ''
PRINT 'Using SQL Server Date functions to check Year.'
PRINT '----------------------------------------------'
PRINT 'Is 1900 a Leap year? ' + dbo.xIsLeapYear(1900)
PRINT 'Is 2000 a Leap year? ' + dbo.xIsLeapYear(2000)
PRINT 'Is 2008 a Leap year? ' + dbo.xIsLeapYear(2008)
PRINT 'Is 2010 a Leap year? ' + dbo.xIsLeapYear(2010)
--Now we will check to see if the code works
-------------------------------------------------
PRINT ''
PRINT 'Using SQL Server Date functions to check Year.'
PRINT '----------------------------------------------'
PRINT 'Is 1900 a Leap year? ' + dbo.xIsLeapYear(1900)
PRINT 'Is 2000 a Leap year? ' + dbo.xIsLeapYear(2000)
PRINT 'Is 2008 a Leap year? ' + dbo.xIsLeapYear(2008)
PRINT 'Is 2010 a Leap year? ' + dbo.xIsLeapYear(2010)
No comments:
Post a Comment