sql >> データベース >  >> RDS >> Sqlserver

T-SQLを使用して日月と年から日付を作成する

    これを試してください:

    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)); 
    


    1. MySQLでデータベースの文字セットと照合を設定する方法

    2. ストアドプロシージャのパラメータとしてリストを渡すにはどうすればよいですか?

    3. TNSPINGはOKですが、sqlplusはORA-12154を提供しますか?

    4. ArraylistのSQLitedb値をListviewに取得する方法