Опитайте това:
Declare @DayOfMonth TinyInt Set @DayOfMonth = 13
Declare @Month TinyInt Set @Month = 6
Declare @Year Integer Set @Year = 2006
-- ------------------------------------
Select DateAdd(day, @DayOfMonth - 1,
DateAdd(month, @Month - 1,
DateAdd(Year, @Year-1900, 0)))
Работи също така, има допълнителна полза от това, че не се извършва преобразуване на низове, така че е чиста аритметична обработка (много бърза) и не зависи от никакъв формат на датата. Това се възползва от факта, че вътрешното представяне на SQL Server за стойностите на datetime и smalldatetime е две части стойност, първата част от която е цяло число, представляващо броя дни от 1 януари 1900 г., а втората част е десетична дроб, представляваща дробната част от един ден (за времето) --- Така че целочислената стойност 0 (нула) винаги се превежда директно в полунощ сутринта на 1 януари 1900 г....
или, благодарение на предложение от @brinary,
Select DateAdd(yy, @Year-1900,
DateAdd(m, @Month - 1, @DayOfMonth - 1))
Редактирано октомври 2014 г. Както бе отбелязано от @cade Roux, SQL 2012 вече има вградена функция:DATEFROMPARTS(year, month, day)
това прави същото.
Редактирано на 3 октомври 2016 г., (Благодаря на @bambams, че забеляза това, и @brinary за поправката), Последното решение, предложено от @brinary. изглежда не работи за високосни години, освен ако не се извърши първо събиране на години
select dateadd(month, @Month - 1,
dateadd(year, @Year-1900, @DayOfMonth - 1));