Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak mogę porównać czas w SQL Server?

Porównanie będzie działać, ale będzie powolne, ponieważ daty są konwertowane na ciąg dla każdego wiersza. Aby skutecznie porównać dwie części czasu, spróbuj:

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

Długie wyjaśnienie:data w serwerze SQL jest przechowywana jako liczba zmiennoprzecinkowa. Cyfry przed przecinkiem reprezentują datę. Cyfry po przecinku reprezentują czas.

Oto przykładowa data:

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

Przekształćmy to w pływak:

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

Teraz weź udział po przecinku, czyli czas:

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

Konwertuj go z powrotem na datę i godzinę:

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

1900-01-01 to po prostu data „zero”; możesz wyświetlić część czasu z konwersją, określając na przykład format 108, który jest tylko czasem:

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

Konwersje między datetime i float są dość szybkie, ponieważ są one zasadniczo przechowywane w ten sam sposób.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Typy kursorów programu SQL Server — dynamiczny kursor | Samouczek SQL Server / Samouczek TSQL

  2. Jak dodać właściwość tożsamości do istniejącej kolumny w SQL Server?

  3. Wstaw dane za pomocą funkcji o wartościach przechowywanych w tabeli w SQL Server

  4. Jak używać GROUP BY do łączenia ciągów w SQL Server?

  5. Zapytanie porównujące daty w SQL