2009-08-06 14 views
0

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

+0

siehe meinen letzten Kommentar ... –

Antwort

5

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.

0

Wirf es auf einen numerischen Wert, andernfalls versucht es, es auf ein Datum zu übertragen.

+0

was sollte icast als numerisch? – agnieszka

0

Verwenden Sie DATEDIFF, um die Differenz zwischen zwei Daten in den erforderlichen Einheiten zu berechnen. Dann wandle das Ergebnis in varchar um.

0

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.

0

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 
0

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) 
+0

warum die down vote? ist '2009-07-24 06:16' nicht 1 Stunde und 14 Minuten anders als '2009-07-24 07:30' ???? –

+0

es funktioniert nicht für alle Beispiele – agnieszka

+0

@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. –