2011-12-02 11 views
0

私は指定した日付の1ヶ月前の日付を私に与える次のコードを持っています。私は以前11/30/11に以下のコードを1月の日付を取得したい場合たとえば、2011年10月31日SQL日付CONVERT

select CONVERT(DATETIME, DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'11-30-11'),0)), 102) 

それがするように、どのように私は上記のコードを変更することができた結果が得られます私が指定したものの2ヶ月前の日付を返すので、コードに'11 -30-11 'を指定すると2011/09/30が返されますか?

私は上記のコードの仕組みを本当に理解できませんか?私は-1を-2に変更しようとしましたが、1日と1月を減算するだけで、10分の31の代わりに2011/10/30が返されます。私はそれがコードの日付よりも2ヶ月少ない、2011/09/30を返すために必要です(11-30-11)。 0と

+0

1ヶ月のようなSQL Serverの

、おそらく単純にYYYYMMDD使用してください。あなたは "前のn月の終わり"を望んでいますか? – gbn

+0

ちょうど前の月の最後の日を返すようにしたかった。上記のコードはうまく動作します。それは10/31/2011を返しますが、私は今、コードで指定された日付の2ヶ月前の最後の日を返す必要があります。それは完全に働いた9/30/2011 –

+0

を返す必要があります。ありがとう! –

答えて

3
CONVERT(DATETIME, 
     DATEADD(d,-1, 
      DATEADD(mm, DATEDIFF(m, 32,'20111130'), 0) -- use yyyymmdd and 32 
     ) 
    , 102) 

DATEADD/DATEDIFFは月1900 01と比較するだから、01にするために32に変更1900年2月

また、お使いの日付形式は安全ではありません。 11月30日が10月30日になる前に、この

DATEADD(d, -1, DATEADD(mm, -2, DATEADD(d, 1,'20111130')))