Ich muss die Differenz in Stunden (Dezimaltyp) zwischen zwei Daten in SQL Server 2008 berechnen.
Ich konnte keine nützliche Technik finden, um datetime mit 'CONVERT' auf MSDN in eine Dezimalzahl umzuwandeln.
Kann mir jemand dabei helfen?
UPDATE:
Um klar zu sein, brauche ich auch den Bruchteil (also Dezimaltyp). Also von 9:00 bis 10:30 sollte es mir 1.5 zurückgeben.
sql-server
tsql
datetime
decimal
Marc
quelle
quelle
datepart
übergeben anDATEDIFF
steuert die Auflösung der Ausgabe. Wenn zum Beispielstart_date
undend_date
von 59 Sekunden unterscheiden, dannDATEDIFF(MINUTE, start_date, end_date) / 60.0
würde 0 zurück, aberDATEDIFF(second, start_date, end_date) / 3600.0
zurückkehren würde 0,0163888 (59/3600).DATEDIFF
einer höheren Auflösung als Stunde) funktioniert.SELECT DATEDIFF(second, DATEADD(minute, -15, GETUTCDATE()), GETUTCDATE()) / 3600.0
Gibt beispielsweise 0,250000 zurück.Subtrahieren Sie einfach die beiden Datums- / Uhrzeitwerte und multiplizieren Sie sie mit 24:
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
Ein Testskript könnte sein:
Declare @Dt1 dateTime Set @Dt1 = '12 Jan 2009 11:34:12' Declare @Dt2 dateTime Set @Dt2 = getdate() Select Cast((@Dt2 - @Dt1) as Float) * 24.0
Dies funktioniert, weil alle Datenzeiten intern als Paar von Ganzzahlen gespeichert werden, die erste Ganzzahl die Anzahl der Tage seit dem 1. Januar 1900 und die zweite Ganzzahl (die die Zeit darstellt) die Anzahl der ( 1 ) Ticks seit Mitternacht ist. (Für SmallDatetimes ist die Zeitanteils-Ganzzahl die Anzahl der Minuten seit Mitternacht). Jede Arithmetik, die mit den Werten durchgeführt wird, verwendet den Zeitanteil als Bruchteil eines Tages. 6 Uhr morgens = 0,25 Uhr, 12 Uhr mittags = 0,5 Uhr usw. Weitere Informationen finden Sie hier unter MSDN-Link .
Cast ((@ Dt2 - @ Dt1) als Float) gibt Ihnen also die Gesamtzahl der Tage zwischen zwei Datumsangaben. Mit 24 multiplizieren, um in Stunden umzurechnen. Wenn Sie insgesamt Minuten benötigen, multiplizieren Sie mit Minuten pro Tag (24 * 60 = 1440) anstelle von 24 ...
HINWEIS 1 : Dies ist nicht dasselbe wie ein dotNet- oder JavaScript-Tick - dieser Tick beträgt ungefähr 3,33 Millisekunden.
quelle
DATEDIFF, aber beachten Sie, dass es eine Ganzzahl zurückgibt. Wenn Sie also Bruchteile von Stunden benötigen, verwenden Sie Folgendes: -
quelle
Mit Postgres hatte ich Probleme mit DATEDIFF, hatte aber Erfolg damit:
das gab mir eine Ausgabe wie "14.3"
quelle
Declare @date1 datetime Declare @date2 datetime Set @date1 = '11/20/2009 11:00:00 AM' Set @date2 = '11/20/2009 12:00:00 PM' Select Cast(DateDiff(hh, @date1, @date2) as decimal(3,2)) as HoursApart
Ergebnis = 1,00
quelle
Sie suchen wahrscheinlich nach der DATEDIFF- Funktion.
Wo Ihr Code so aussehen könnte:
DATEDIFF (hh, Startdatum, Enddatum)
quelle
Oder verwenden Sie dies für 2 Dezimalstellen:
quelle
SELECT DATEDIFF (hh, firstDate, secondDate) FROM tableName WHERE ...
quelle