2017-05-01 11 views
0

月間の2つの日付の差を計算したいと思います。日付に基づいて月の差を計算するSQL Server 2008 R2

問題:

SELECT DATEDIFF(mm, '2015-11-01', '2015-11-30') 

日付差は、私が代わりに1を表示したい0を返します。差が15日を超える場合は、次の月にラウンドする必要があります。

私は丸型と天井の機能と分割を30回使ってみましたが、それでも私は望みの結果を得られませんでした。

この質問は、開始日と終了日に基づいて唯一の月計算を探しているため、「可能な重複」とは異なります。また、私の開始日と終了日の構造は、月の始まりであり、正確な日付の代わりに月末です。

+1

あなたには、いくつかのカスタム日付解析ロジックをしたいと内蔵の通常のデフォルトに不満があるように見えます –

+2

あなたが指定したdate_partでは月、ので、ゼロを返す、と月の違いはあなたの例ではありません日付解析ロジック。 週の違いを数えてそこから行くのはどうでしょうか? SELECT DATEDIFF(wk、 '2015-11-01'、 '2015-11-30') SELECT DATEDIFF(wk、 '2015-11-01'、 '2015-11-15') – Sage

+1

(1) 'mm'のような怠惰な短縮形を使うのではなく、' month'を書き出します([こちら](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using- (2) 'datediff'は、渡された境界を測定するだけです。(date_time-operationsを使用して短縮されます。)そして[ここ](https://blogs.sentryone.com/aaronbertrand/backtobasics-dating-responsibly/)これらの日付は両方とも11月に発生したため、月の変更は行われませんでした。日付の差分は0です。日付に基づいていたい場合は、DATEDIFF(DAY、...)/ 15を使用します。 –

答えて

0

はこれを試してみてください。

Select 
    DATEDIFF(mm, '2015-11-01', '2015-11-30') 
    + CASE WHEN abs(DATEPART(day, '2015-11-01') - DATEPART(day, '2015-11-30')) > 15 THEN 1 ELSE 0 END 
1

はこれを試してみてください:

SELECT DATEDIFF(mm, '2015-11-01', '2015-11-30') + CASE WHEN (DATEDIFF(mm, '2015-11-01', '2015-11-30') = 0 and DATEDIFF(dd, '2015-11-01', '2015-11-30') > 15) THEN 1 ELSE 0 END CASE

+0

ちょうど[月と日を記入してください](https://blogs.sentryone.com/aaronbertrand/backtobasics-dating-responsibly/)... –

+0

この解決法は間違いなく私に正しい方向を指摘しましたが、正確ではありません。例: '2015-11-01'と '2015-12-01'の差は1ではなく2になっています。 – NonProgrammer

+0

@NonProgrammer私はエラーを認識し、月diffの更新テストを0にしました。トリックを行う必要があります。 –

関連する問題