Ich habe eine Spalte Start und Spalte Ende. Ich möchte die Anzahl der Stunden und Minuten zwischen ihnen bekommen. Select cast (End - Start as varchar) gibt seltsame Ergebnisse, zum Beispiel 2009-07-24 06:16 - 2009-07-24 06:30 gibt Ergebnis 12:14 AM ... Es ist wichtig, es als Varchar zu interpretieren, weil später Ich schneide Teilstrings aus dieser Zeichenfolge mit right() und left(). Wie kann ich das richtige Ergebnis erhalten?T-SQL Datumsangaben Subtraktion
Antwort
können Sie verwenden, um die DATEDIFF Funktion
SELECT DATEDIFF(mi, Start, End)
Dieses Sie die Anzahl der Minuten zwischen Start und Ende geben, dann können Sie diese auf Stunden und Minuten konvertieren.
Wirf es auf einen numerischen Wert, andernfalls versucht es, es auf ein Datum zu übertragen.
was sollte icast als numerisch? – agnieszka
Verwenden Sie DATEDIFF, um die Differenz zwischen zwei Daten in den erforderlichen Einheiten zu berechnen. Dann wandle das Ergebnis in varchar um.
Sie sollten wahrscheinlich für die Ausgabe eines datediff
Der Grund zu tun ist, Sie sehen die Art und Weise SQL die beiden Teile der Art und Weise behandelt es ein Datum speichert.
Ein Datum wird zweiteilig in einem numerischen Wert gespeichert. Der erste Teil, der ganzzahlige Teil speichert den Tag, und der zweite Teil, der Dezimalteil, speichert die Zeit.
Wenn Ihre beiden Daten 1.50 und 1.25 entsprechen, dann 1.25 - 1.50 = -0.25 - dann wird diese in zwei Teile aufgeteilt: -0 Tage und .25 Zeit. 0,25 von einem Tag würde zu 6 Stunden übersetzen, würde also eine Zeit von 6.00 Uhr geben.
Um eine korrekte Datumsmanipulation zu erhalten, sollten Sie DATEDIFF und DATEPART verwenden.
VARCHARS sollten niemals für Datumsmanipulation verwendet werden. verwenden datediff wie folgt aus:
declare @date1 datetime, @date2 datetime
select @date1 = getdate(), @date2 = DATEADD(n, 145, @date1)
SELECT @date1, @date2
select DATEDIFF(n, @date1, @date2) as DiffMinutes,
DATEDIFF(n, @date1, @date2)/60 as DiffHours,
DATEDIFF(n, @date1, @date2)%60 as DiffMinutesOfTheHour
für Stunden und Minuten, die relativ zueinander sind: Verwendung:
DECLARE @StartDate datetime
DECLARE @EndDate datetime
set @StartDate ='2009-07-24 06:16'
SET @EndDate ='2009-07-24 07:30 '
SELECT DATEDIFF(HH,@StartDate,@EndDate) AS Hours,
DATEDIFF(mi,@StartDate,@EndDate)-DATEDIFF(HH,@StartDate,@EndDate)*60 AS Minutes
kehrt:
Hours Minutes
----------- -----------
1 14
(1 row(s) affected)
warum die down vote? ist '2009-07-24 06:16' nicht 1 Stunde und 14 Minuten anders als '2009-07-24 07:30' ???? –
es funktioniert nicht für alle Beispiele – agnieszka
@agnieszka, welche Beispiele ?? Ich habe es für mehrere Kombinationen mit Unterschieden in den Tagen, Stunden und/oder Minuten ausgeführt und es funktioniert gut. Vielleicht verstehen Sie falsch, wie es funktioniert. geben Sie mir ein StartDate und EndDate, wo dies ein falsches Ergebnis ergibt. –
- 1. BigDecimal Subtraktion
- 2. Currying Subtraktion
- 3. Subtrahierende Datumsangaben
- 4. Ruby Array mit Subtraktion
- 5. Pandas Spalte Addition/Subtraktion
- 6. Fließkomma-Subtraktion in Python
- 7. Char Subtraktion in C++
- 8. Subtraktion 8-Bit-Binärzahl
- 9. Subtraktion Rahmen OpenCV
- 10. Python Array Subtraktion
- 11. Subtraktion von Zeitformat
- 12. Datum Subtraktion Fehler
- 13. Feld Subtraktion Mysql mit
- 14. Bash Set Subtraktion
- 15. Javascript Datum Subtraktion
- 16. CSS Breite Subtraktion
- 17. fraktionale binäre Subtraktion
- 18. Carry-Flag in Subtraktion
- 19. Excel-Duplikat Datum Subtraktion
- 20. Subtraktion Summen in SSRS
- 21. Doppel Subtraktion Präzision Ausgabe
- 22. Subtraktion nicht für f32 implementiert?
- 23. Python Subtraktion von zwei Datumsstrings
- 24. MySQL Die Rückkehr einer Subtraktion
- 25. Tuning Hintergrund Subtraktion mit OpenCV
- 26. Subtraktion zwischen zwei SQL-Abfragen
- 27. Signed Hex Subtraktion vs unsigned
- 28. Postgres - Subtraktion von zwei Abfragen
- 29. Subtraktion der nicht teilbarer Zeigeradressen
- 30. Subtraktion umgekehrt Ziffern mit Rekursion
siehe meinen letzten Kommentar ... –