これを試してください:
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)))
同様に機能し、文字列変換を行わないという利点が追加されているため、純粋な算術処理(非常に高速)であり、日付形式に依存しません。これは、SQLServerのdatetime値とsmalldatetime値の内部表現が2つの部分であるという事実を利用しています。最初の部分は1900年1月1日からの日数を表す整数であり、2番目の部分は1日の小数部分(時間)を表す小数です。つまり、整数値0(ゼロ)常に1900年1月1日の真夜中の朝に直接変換されます...
または、@brinaryからの提案のおかげで
Select DateAdd(yy, @Year-1900,
DateAdd(m, @Month - 1, @DayOfMonth - 1))
2014年10月に編集。@cadeRouxが指摘しているように、SQL2012には組み込み関数があります。DATEFROMPARTS(year, month, day)
同じことをします。
2016年10月3日編集(これに気付いてくれた@bambamsと、修正してくれた@brinaryに感謝します)、@brinaryによって提案された最後の解決策。年の加算が最初に実行されない限り、うるう年は機能しないようです
select dateadd(month, @Month - 1,
dateadd(year, @Year-1900, @DayOfMonth - 1));