sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan jeg sammenligne tid i SQL Server?

Din sammenligning vil fungere, men den vil være langsom, fordi datoerne konverteres til en streng for hver række. For effektivt at sammenligne to tidsdele, prøv:

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

Lang forklaring:en dato i SQL-serveren gemmes som et flydende kommanummer. Cifrene før decimaltegnet repræsenterer datoen. Cifrene efter decimaltegnet repræsenterer tiden.

Så her er et eksempel på en dato:

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

Lad os konvertere det til en flyder:

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

Tag nu delen efter kommategnet, altså tiden:

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

Konverter det tilbage til en dato og klokkeslæt:

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

1900-01-01 er blot "nul"-datoen; du kan vise tidsdelen med konverter, angive for eksempel format 108, som kun er tiden:

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

Konverteringer mellem datetime og float er ret hurtige, fordi de grundlæggende er gemt på samme måde.



  1. Integration af værktøjer til at administrere PostgreSQL i produktion

  2. Opsætning af et udviklingsmiljø for at lære PL/SQL

  3. få JOIN-tabel som en række resultater med PostgreSQL/NodeJS

  4. Hvad er en visning i Oracle?