Wie zu verwenden DATEDIFF zurückzukehren, Jahr, Monat und Tag?
Wie kann ich mit DATEDIFF zurück die Differenz zwischen zwei Datumsangaben in Jahren, Monaten und Tagen, die in SQL Server 2005
DATEDIFF (date , Datum)
Wie Ergebnis: 2 Jahr 3 Monat 10 Tage
Kann jemand vervollständigen dieses t-sql?
ALTER FUNCTION [dbo].[gatYMD](@dstart VARCHAR(50), @dend VARCHAR(50))
RETURNS VARCHAR(50) AS
BEGIN
DECLARE @yy INT
DECLARE @mm INT
DECLARE @getmm INT
DECLARE @dd INT
SET @yy = DATEDIFF(yy, @dstart, @dend)
SET @mm = DATEDIFF(mm, @dstart, @dend)
SET @dd = DATEDIFF(dd, @dstart, @dend)
SET @getmm = ABS(DATEDIFF(mm, DATEADD(yy, @yy, @dstart), @dend))
RETURN (
Convert(varchar(10),@yy) + 'year' + Convert(varchar(10),@mm) + 'month' + Convert(varchar(10),@dd) + 'day'
)
END
- 23year 280month 8506day ?
- Beachten Sie, dass im Allgemeinen, die Frage ist schlecht definiert. Betrachten wir zwei Termine, in den letzten Speicher: 2009-02-25 2009-03-28-und. Mein Verdacht ist, dass die zu erwartende Antwort wäre 0 Jahren, 1 Monat, 3 Tage. Was 2009-02-25-und 2009-03-05? Und 2009-03-25-und 2009-04-05? 2009-02-25-und 2009-04-05? Die erste davon sein könnte, sein soll, 0y, 0m, 8d; der zweite könnte sein, 0y, 0m, 11d; ich bin nicht sicher über die Dritte - wohl 0y, 1m, 11d. Was 2000-02-29 und 2003-01-31? 2000-02-29 und 2003-02-28?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist meine Lösung für Eric Funktion:
Gute Entscheidung, auf den Einsatz von ABS zu behandeln, wenn das Startdatum liegt nach dem Enddatum.
Diese:
..oder nicht-CTE verwenden Sie für SQL Server 2000 und vor:
...zurück:
Referenz: DATEDIFF
Funktioniert es für manche Situationen, aber wenn Sie subtrahieren von Daten wie 2007-10-15 (DateHired) von 2011-01-13 (dateterminated), gibt Sie eine negative Zahl ein, wenn das abs nicht herum, sondern setzen die abs-around nicht fix it entweder, weil dann das Jahr und der Monat Abbildung sind falsch.
Die Modifizierte Funktion
Prüfen Sie auf dieser Seite... http://www.sqlteam.com/article/datediff-function-demystified
Erstellen dieser Funktionen:
und
und schließlich
Größen!
Erstellen, diese Funktion wird es geben, das genaue Datum Differenz wie Jahre Monate Tage
Ich weiß, es gibt ein paar Antworten hier schon, aber ich dachte, ich würde hinzufügen, was ich kam mit, da (zumindest für mich) scheint es sehr einfach zu Folgen:
Dann, wenn Sie anrufen mit:
Bekommst du dieses Ergebnis:
Natürlich könnten Sie dies ändern, um eine formatierte Ausgabe und eine Skalare variable ersetzt werden, aber das überlasse ich Euch 🙂
EDIT:
Habe ich beendet, brauchen auch eine Zeit-Funktion geben Sie ein format wie "5 Jahre und vor 2 Tagen"
Hier sind 2 Beispiele
und
Ich hoffe das ist für jemanden in der Zukunft sowieso, wie ich konnte nicht viel auf so etwas, wenn die Suche (könnte nur einer von diesen Tagen, aber ich bin offen für Verbesserungen, wie ich weiß, ich bin nicht immer die kompakteste und Schnellste code-Programmierer 🙂
Hinsichtlich
Liam
und
Ergebnis: