Coba ini:
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)))
Ini juga berfungsi, telah menambahkan manfaat dari tidak melakukan konversi string apa pun, jadi ini adalah pemrosesan aritmatika murni (sangat cepat) dan tidak bergantung pada format tanggal apa pun. Ini memanfaatkan fakta bahwa representasi internal SQL Server untuk nilai datetime dan smalldatetime adalah dua bagian nilai bagian pertama yang merupakan bilangan bulat yang mewakili jumlah hari sejak 1 Jan 1900, dan bagian kedua adalah pecahan desimal yang mewakili bagian pecahan satu hari (untuk waktu) --- Jadi nilai bilangan bulat 0 (nol) selalu diterjemahkan langsung ke tengah malam pagi 1 Jan 1900...
atau, terima kasih atas saran dari @brinary,
Select DateAdd(yy, @Year-1900,
DateAdd(m, @Month - 1, @DayOfMonth - 1))
Diedit Oktober 2014. Seperti yang dicatat oleh @cade Roux, SQL 2012 sekarang memiliki fungsi bawaan:DATEFROMPARTS(year, month, day)
yang melakukan hal yang sama.
Diedit 3 Okt 2016, (Terima kasih kepada @bambams untuk memperhatikan ini, dan @brinary untuk memperbaikinya), Solusi terakhir, diusulkan oleh @brinary. tampaknya tidak berfungsi untuk tahun kabisat kecuali jika penambahan tahun dilakukan terlebih dahulu
select dateadd(month, @Month - 1,
dateadd(year, @Year-1900, @DayOfMonth - 1));