проверка ниже,
DECLARE @date DATETIME = '02/05/2016'
SELECT CASE WHEN month(@date) IN (1,3,5,7,8,10,12) THEN 31 - DATEPART(DD,@date)
WHEN month(@date) IN (4,6,9,11) THEN 30 - DATEPART(DD,@date)
ELSE 28 - DATEPART(DD,@date)
END
Примечание: в приведенном выше коде високосного года не учитывается
отредактировал: leap year proof version
DECLARE @date DATETIME = '02/05/2016'
DECLARE @leap_year bit = 0
IF ((YEAR(@date) % 4 = 0 AND YEAR(@date) % 100 <> 0) OR YEAR(@date) % 400 = 0)
SET @leap_year = 1
SELECT CASE WHEN MONTH(@date) IN (1,3,5,7,8,10,12) THEN 31 - DATEPART(DD,@date)
WHEN MONTH(@date) IN (4,6,9,11) THEN 30 - DATEPART(DD,@date)
WHEN MONTH(@date) = 2 AND @leap_year = 1 then 29 - DATEPART(DD,@date)
ELSE 28 - DATEPART(DD,@date)
END
вы используете как Oracle и SQL Server? – Squirrel
Только голова, 'DATEPART()' возвращает часть даты, указанной в ARG1. Таким образом, 'DATEPART (DD, '3/5/2016')' вернет часть дня этой даты, которая равна 5. Это не 5 дней, это 5-й день марша. 'DATEDIFF()' - это то, что вы хотите использовать, и есть несколько отличных ответов ниже о том, как это сделать. Ура! – scsimon
Я удалил тег Oracle, потому что синтаксис явно является SQL Server. –