2017-08-30 6 views
0

私はStartDateフィールドとEndDateフィールドを持つテーブルを扱っています。私は何年もの間に違いを見つける必要があります。年の2つの日付の差を取得する

例: 開始日= 2017年1月1日 終了日= 2017年12月31日

私は日付の差を= 1に結果を期待しています。

また、最も近い整数に丸めたいと思います。

例: 開始日= 2017年1月1日 終了日= 2017年11月30日

私は日付の差を= 1に結果を期待しています。

datediff関数を使用すると、結果を得ることができますが、最も近い整数に丸められません。

例クエリ:私は65ヶ月/ 12が5.5未満になるにもかかわらず、6年間取得しています :

select (DATEDIFF(yy, '01/01/2016', '5/31/2021') 
+ CASE WHEN abs(DATEPART(day, '01/01/2016') - DATEPART(day, '05/31/2021')) > 15 THEN 1 ELSE 0 END) 
select (DATEDIFF(mm, '01/01/2016', '05/31/2021') 
+ CASE WHEN abs(DATEPART(day, '01/01/2016') - DATEPART(day, '05/31/2021')) > 15 THEN 1 ELSE 0 END) 
+0

「ROUND」機能を試しましたか? – cwanjt

+0

ラウンド関数を試しましたが、1ではなく上記のクエリで0が返され続けます.0.5が返される場合は0、0.5以上の場合は1が表示されます。私はどちらかを1のように見せることができます。 – NonProgrammer

+0

私はちょうど私の間違いを認識しました。私は正しくラウンド関数を使用していませんでした:私はこれが動作すると思います:select round(1.3、0) – NonProgrammer

答えて

0

これまでのクエリは正常に動作しているようです。私の間違いは、正しく動作するように四捨五入するために、12.0でなく12で除算したことです。誰かわかったね! :

select 
Round((DATEDIFF(mm, '01/01/2016', '07/1/2017') 
    + CASE WHEN abs(DATEPART(day, '01/01/2016') - DATEPART(day, '06/30/2017')) > 15 THEN 1 ELSE 0 END)/12.0, 0) 
1
DECLARE @startdate DATETIME = '1-1-2017', 
     @enddate DATETIME = '12-31-2018' 
SELECT @startdate as StartDate, @enddate as EndDate, 
DATEDIFF(YEAR, @startdate, @enddate) 
    - 
(CASE 
    WHEN DATEADD(YEAR, 
      DATEDIFF(YEAR, @startdate,@enddate), @startdate) 
     > @enddate THEN 1 
     ELSE 0 END) 'Date difference in Years' 

使用このコードは、私はそれはあなたを助けることを願っています。

+0

あなたのコードでの問題は、07-01-2018を@enddateとして使用すると、2 。 – NonProgrammer

関連する問題