Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich die Zeit in SQL Server vergleichen?

Ihr Vergleich funktioniert, ist aber langsam, da die Daten für jede Zeile in eine Zeichenfolge konvertiert werden. Um zwei Zeitabschnitte effizient zu vergleichen, versuchen Sie Folgendes:

declare @first datetime
set @first = '2009-04-30 19:47:16.123'
declare @second datetime
set @second = '2009-04-10 19:47:16.123'

select (cast(@first as float) - floor(cast(@first as float))) -
       (cast(@second as float) - floor(cast(@second as float)))
       as Difference

Lange Erklärung:Ein Datum im SQL-Server wird als Gleitkommazahl gespeichert. Die Ziffern vor dem Dezimalpunkt stellen das Datum dar. Die Ziffern nach dem Komma stellen die Uhrzeit dar.

Hier ist ein Beispieldatum:

declare @mydate datetime
set @mydate = '2009-04-30 19:47:16.123'

Konvertieren wir es in ein Float:

declare @myfloat float
set @myfloat = cast(@mydate as float)
select @myfloat
-- Shows 39931,8244921682

Nehmen Sie nun den Teil nach dem Kommazeichen, also die Uhrzeit:

set @myfloat = @myfloat - floor(@myfloat) 
select @myfloat
-- Shows 0,824492168212601

Konvertieren Sie es zurück in eine Datumszeit:

declare @mytime datetime
set @mytime = convert(datetime,@myfloat)
select @mytime
-- Shows 1900-01-01 19:47:16.123

Der 1.1.1900 ist nur das "Null"-Datum; Sie können den Zeitteil mit convert anzeigen, indem Sie beispielsweise das Format 108 angeben, das nur die Zeit ist:

select convert(varchar(32),@mytime,108)
-- Shows 19:47:16

Konvertierungen zwischen datetime und float sind ziemlich schnell, da sie grundsätzlich auf die gleiche Weise gespeichert werden.