2017-08-30 2 views
0

Ich arbeite mit einer Tabelle, die StartDate und EndDate Felder hat. Ich muss einen Unterschied zwischen den Jahren finden.Erhalten Sie den Unterschied zwischen zwei Daten in Jahren

Beispiel: Startdate = 2017.01.01 EndDate = 12/31/2017

I Ergebnis erwarten = 1 für das Datum Unterschied.

Auch ich möchte es auf die nächste ganze Zahl runden.

Beispiel: Startdate = 2017.01.01 EndDate = 11/30/2017

I Ergebnis erwarten = 1 für das Datum Unterschied.

Mit der datediff-Funktion kann ich das Ergebnis erhalten, aber es wird nicht auf die nächste ganze Zahl gerundet.

Beispiel query: erhalte ich 6 Jahre, obwohl 65 Monate/12 wäre weniger als 5,5:

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

Haben Sie versucht, die 'ROUND' Funktion zu verwenden? – cwanjt

+0

Ich habe runde Funktion versucht, aber es gibt 0 für obige Abfrage anstelle von 1 zurück. Ich möchte 0 sehen, wenn weniger als 0,5 zurückgegeben wird und 1, wenn mehr als 0,5 zurückgegeben. Ich kann entweder scheinen zu tun 1. – NonProgrammer

+0

Ich habe gerade meinen Fehler erkannt. Ich habe die runde Funktion nicht korrekt verwendet: Ich denke, das wird funktionieren: Wähle Runde (1.3, 0) – NonProgrammer

Antwort

0

Bisher scheint folgende Abfrage in Ordnung zu sein. Mein Fehler war ich dividieren um 12 statt 12.0 für die Rundung, um richtig zu arbeiten. Wer wusste! :

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' 

Verwenden Sie diesen Code, ich hoffe, es wird Ihnen helfen.

+0

Problem mit deinem Code ist, wenn du 07-01-2018 als dein @enddate verwendest, es wird dir immer noch 1 Jahr statt 2 geben . – NonProgrammer

Verwandte Themen