Hãy thử điều này:
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)))
Nó cũng hoạt động, có thêm lợi ích là không thực hiện bất kỳ chuyển đổi chuỗi nào, vì vậy nó là xử lý số học thuần túy (rất nhanh) và không phụ thuộc vào bất kỳ định dạng ngày nào giá trị phần đầu tiên là một số nguyên đại diện cho số ngày kể từ ngày 1 tháng 1 năm 1900 và phần thứ hai là một phần thập phân đại diện cho phần thập phân của một ngày (cho thời gian) --- Vì vậy, giá trị số nguyên 0 (không) luôn dịch trực tiếp sang Nửa đêm sáng ngày 1 tháng 1 năm 1900 ...
hoặc nhờ gợi ý từ @becial,
Select DateAdd(yy, @Year-1900,
DateAdd(m, @Month - 1, @DayOfMonth - 1))
Được chỉnh sửa vào tháng 10 năm 2014. Như được ghi nhận bởi @cade Roux, SQL 2012 hiện có một chức năng tích hợp:
DATEFROMPARTS(year, month, day)
điều đó cũng hoạt động tương tự.
Đã chỉnh sửa ngày 3 tháng 10 năm 2016, (Cảm ơn @bambams đã nhận thấy điều này và @buria đã sửa nó), Giải pháp cuối cùng do @brets đề xuất. Dường như không hoạt động trong những năm nhuận trừ khi việc bổ sung năm được thực hiện trước
select dateadd(month, @Month - 1,
dateadd(year, @Year-1900, @DayOfMonth - 1));