2017-02-24 1 views
0

Ich habe ein Problem mit DateDiff (die Anzahl der Monate zwischen zwei Daten)DATEDIFF (Monat)

Wenn ich versuche, dies:

SELECT 
(CASE 
WHEN X IS NOT NULL THEN 

CONVERT(varchar(4), DATEDIFF(YEAR, Y, C)) + ' years ' 

ELSE 
CONVERT(varchar(4), DATEDIFF(YEAR, A, GETDATE())) + ' years '+ 
CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy,GETDATE(),b), S), GETDATE()) AS varchar(4)) +' month '+ 
CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, c, GETDATE()), e), GETDATE()), DATEADD(yy, DATEDIFF(yy, f, GETDATE()), g)), GETDATE()) AS varchar(2)) +' day' end) as result 

FROM g INNER JOIN k ON M=U 
WHERE T=XX order by Y; 

Ergebnis wie folgt aussehen: 2 Jahre 342 Monate 2 Tage 2 Jahre 3 Monate 2 Tag für die ex:


Aber sein sollte so etwas wie dieses.

Kann mir bitte jemand in die richtige Richtung zeigen. Vielen Dank.


Richtige Antwort:

CONVERT(varchar(4), DATEDIFF(dd, x, GETDATE())/365) + ' år '+ 

CONVERT(varchar(4), DATEDIFF(MONTH, x, GETDATE()) % 12) + ' måneder '+ 

CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, x, GETDATE()), x), GETDATE()), 
DATEADD(yy, DATEDIFF(yy, x, GETDATE()), x)), GETDATE()) AS varchar(2)) +' dag ' end) as Y, 
+0

Bearbeiten Sie Ihre Frage und liefern Beispieldaten und die gewünschten Ergebnisse. –

+0

Mögliches Duplikat von [Wie DATEDIFF verwendet wird, um Jahr, Monat und Tag zurückzugeben?] (Http://stackoverflow.com/questions/1541570/how-to-use-datediff-to-return-year-month-and-day) – Tanner

+0

@GordonLinoff; Ich habe es bearbeitet, wenn es noch etwas gibt, bitte sagen Sie mir :) – RyaN

Antwort

0

Sie benötigen einige zusätzliche Berechnungen zu machen. Werfen Sie einen Blick auf diese

declare @AsOnDate datetime 
declare @mdob datetime 
set @AsOnDate = GETDATE() 
set @mdob = '2014-12-22' 
Select 
"Years" = CASE 
WHEN (DATEPART(DAY , @mdob)) > (DATEPART(DAY , @AsOnDate)) 
and (DATEPART(Month,@mdob)) = (DATEPART(Month, @AsOnDate)) 
THEN ((datediff(month,@mdob,@AsOnDate)-1)/12) 
ELSE (datediff(month,@mdob,@AsOnDate)/12) 
END, 
"Months" = CASE 
WHEN (DATEPART(DAY , @mdob)) > (DATEPART(DAY , @AsOnDate)) 
and (DATEPART(Month,@mdob)) = (DATEPART(Month,@AsOnDate)) 
THEN ((datediff(month,@mdob,@AsOnDate)-1)% 12) 
ELSE (datediff(month,@mdob,@AsOnDate)% 12) 
END 

Lösung von hier genommen: https://www.sqlservercentral.com/Forums/Dialogs/PostDetails.aspx?PostID=1423756

+0

Das wird komplizierter, wenn du auch Tage implementieren willst, aber für die Jahre und Monate ist es genau – PawelCz

+0

tnx für deine Hilfe, könntest du bitte einen Ex für Day geben ebenfalls ! – RyaN

+0

Im selben Link gibt es eine Funktionsimplementierung, die auch die Tage berechnet (nicht erneut getestet). Überprüfen Sie hier: https://www.sqlservercentral.com/Forums/1042865/how-to-get-date-difference-in-years-month-and-date#bm1057924 – Kostis