Gibt es eine Möglichkeit, den Unterschied zwischen zwei zu nehmen? datetime
in SQL Server zu nehmen?
Zum Beispiel sind meine Daten
2010-01-22 15:29:55.090
2010-01-22 15:30:09.153
Das Ergebnis sollte also sein 14.063 seconds
.
sql
sql-server
datetime
Jibu P C_Adoor
quelle
quelle
datediff
Antworten, aber keine scheint Sie daran zu erinnern, dass Sie abhängig von der Parameterreihenfolge möglicherweise negative Ergebnisse erhalten.Antworten:
Nur eine Einschränkung für DateDiff: Es zählt, wie oft Sie die Grenze überschreiten, die Sie als Einheiten angegeben haben. Wenn Sie also nach einer genauen Zeitspanne suchen, treten Probleme auf. z.B
gibt eine Antwort von 1, da es die Grenze von Januar bis Februar überschritten hat. Obwohl die Spanne 2 Tage beträgt, würde datiert einen Wert von 1 zurückgeben - es hat 1 Datumsgrenze überschritten.
Gibt einen Wert von 1 aus, hat die Minutengrenze einmal überschritten. Obwohl sie ca. 14 Sekunden beträgt, wird sie bei Verwendung von Minuten als Einheiten als einzelne Minute zurückgegeben.
quelle
Ersetzen Sie "MyUnits" basierend auf DATEDIFF auf MSDN
quelle
Ersetzen Sie
day
mit anderen Einheiten , die Sie wollen in den Unterschied zu bekommen, wiesecond
,minute
usw.quelle
Ich kann vier wichtige Funktionen von MS SQL Server erwähnen, die sehr nützlich sein können:
1) Die Funktion DATEDIFF () ist für die Berechnung der Differenzen zwischen zwei Daten verantwortlich. Das Ergebnis könnte " Jahr, Viertel, Monat, Tag, Jahr, Woche, Stunde, Minute, Sekunde, Millisekunde, Mikrosekunde, Nanosekunde " sein, angegeben im ersten Parameter ( Datumsteil ):
2) Mit der Funktion GETDATE () können Sie die tatsächliche Uhrzeit abrufen und Differenzen zwischen einem bestimmten Datum und einem tatsächlichen Datum berechnen:
3) Eine weitere wichtige Funktion ist DATEADD () , mit der ein Wert in Datum / Uhrzeit mit demselben Datumsteil des Datums konvertiert wird, den Sie zu einem Basisdatum hinzufügen (mit positiven Werten) oder subtrahieren (mit negativen Werten) können:
4) Die Funktion CONVERT () wurde erstellt, um das Datum wie gewünscht zu formatieren. Es ist keine parametrische Funktion, aber Sie können einen Teil des Ergebnisses verwenden, um das Ergebnis wie gewünscht zu formatieren:
DATETIME kalt wird in Sekunden berechnet und ein interessantes Ergebnis beim Mischen dieser vier Funktionen besteht darin, eine formulierte Differenz um Stunden, Minuten und Sekunden ( hh: mm: ss ) zwischen zwei Daten anzuzeigen :
... das Ergebnis ist 00:10:38 (638s = 600s + 38s = 10 Minuten und 38 Sekunden)
Ein anderes Beispiel:
quelle
Ich habe es so versucht und es hat funktioniert. Ich habe SQL Server Version 2016 verwendet
Verschiedene DATEDIFF-Funktionen sind:
Ref: https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017
quelle
Ok, wir alle wissen, dass die Antwort beinhaltet
DATEDIFF()
. Aber das gibt Ihnen nur die Hälfte des Ergebnisses, nach dem Sie vielleicht suchen. Was ist, wenn Sie die Ergebnisse in einem für Menschen lesbaren Format in Minuten und Sekunden zwischen zweiDATETIME
Werten erhalten möchten ?Das
CONVERT()
,DATEADD()
und natürlichDATEDIFF()
Funktionen sind perfekt für ein leichtes lesbares Ergebnis , dass Ihre Kunden statt einer Zahl verwenden können.dh
Dies gibt Ihnen so etwas wie:
Wenn Sie mehr Präzision wünschen, erhöhen Sie einfach die
VARCHAR()
.quelle
Intern in SQL Server werden Daten als 2 Ganzzahlen gespeichert. Die erste Ganzzahl ist die Anzahl der Daten vor oder nach dem Basisdatum (1900/01/01). Die zweite Ganzzahl speichert die Anzahl der Uhr-Ticks nach Mitternacht, jeder Tick ist 1/300 Sekunde.
Mehr Infos hier
Aus diesem Grund finde ich es oft am einfachsten, Daten zu vergleichen, indem ich sie einfach subtrahiere. Dies behandelt 90% meiner Anwendungsfälle. Z.B,
Wenn ich eine Antwort in anderen Einheiten als Tagen benötige, verwende ich DateDiff .
quelle
DATETIME
Art, nicht aufDATE
,TIME
oderDATETIME2
. Der zurückgegebene Wert ist auch ein andererDATETIME
, sodass Sie ihn umwandeln müssen, um die lesbare Anzahl von Tagen zwischen den Daten zu erhalten.Es gibt verschiedene Möglichkeiten, um einen Datumsunterschied zu ermitteln, und mehr, wenn Sie Datum und Uhrzeit vergleichen. Folgendes verwende ich, um den Unterschied zwischen zwei als "HH: MM: SS" formatierten Daten zu ermitteln:
Ich habe dies für eine berechnete Spalte verwendet, aber Sie können es trivial als UDF- oder Abfrageberechnung umschreiben. Beachten Sie, dass diese Logik Sekundenbruchteile abrundet. 00: 00.00 bis 00: 00.999 wird als Null Sekunden betrachtet und als "00:00:00" angezeigt.
Wenn Sie davon ausgehen, dass die Zeiträume länger als einige Tage dauern können, wechselt dieser Code bei Bedarf in das Format D: HH: MM: SS:
quelle
Die folgende Abfrage sollte genau das enthalten, wonach Sie suchen.
Hier ist der Link von MSDN für alles, was Sie mit der Datumstiff-Funktion tun können. https://msdn.microsoft.com/en-us/library/ms189794.aspx
quelle
Es gibt Ihnen einen Unterschied zwischen zwei Daten im Jahr
Hier (2017-2011) = 6 als Ergebnis
Syntax:
quelle
Das ist also nicht meine Antwort, aber ich habe sie gerade gefunden, als ich online nach einer solchen Frage gesucht habe. Dieser Typ hat ein Verfahren zur Berechnung von Stunden, Minuten und Sekunden eingerichtet. Der Link und der Code:
quelle
quelle
PRINT DATEDIFF (zweitens '2010-01-22 15: 29: 55.090', '2010-01-22 15: 30: 09.153')
quelle
Ich dachte nur, ich würde es erwähnen.
quelle
CREATE FUNCTION getDateDiffHours (@fdate AS datetime, @ tdate as datetime) RETURNS varchar (50) AS BEGIN DECLARE @cnt int DECLARE @cntDate datetime DECLARE @dayDiff int DECLARE @dayDiffWk int DECLARE @hrsDiff decimal (18)
ENDE
quelle
Sol-1:
Sol-2:
Sol-3:
Datepart funktioniert am besten
quelle
Bitte überprüfen Sie den folgenden Trick, um den Datumsunterschied zwischen zwei Daten zu ermitteln
Hier können Sie je nach Anforderung Änderungen vornehmen, wenn Sie einen Unterschied zwischen Tagen, Monaten, Jahren oder Zeiten wünschen.
quelle
Verwenden Sie dies für
DD:MM:SS
:quelle
Überprüfen Sie DateDiff auf Books Online.
quelle
Für mich funktionierte dies perfekt Konvertieren (varchar (8), DATEADD (ZWEITER, DATEDIFF (ZWEITER, LogInTime, LogOutTime), 0), 114)
und die Ausgabe ist HH: MM: SS, was in meinem Fall genau angezeigt wird.
quelle