Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để so sánh thời gian trong SQL Server?

So sánh của bạn sẽ hoạt động, nhưng sẽ chậm vì ngày tháng được chuyển đổi thành một chuỗi cho mỗi hàng. Để so sánh hiệu quả hai phần thời gian, hãy thử:

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

Giải thích dài:một ngày trong máy chủ SQL được lưu trữ dưới dạng số dấu phẩy động. Các chữ số trước dấu thập phân đại diện cho ngày tháng. Các chữ số sau dấu thập phân thể hiện thời gian.

Vì vậy, đây là một ngày ví dụ:

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

Hãy chuyển nó thành float:

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

Bây giờ hãy lấy một phần sau ký tự dấu phẩy, tức là thời gian:

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

Chuyển nó trở lại ngày giờ:

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

1900-01-01 chỉ là ngày "số không"; bạn có thể hiển thị phần thời gian với chuyển đổi, chỉ định định dạng ví dụ 108, chỉ là thời gian:

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

Chuyển đổi giữa datetime và float khá nhanh vì về cơ bản chúng được lưu trữ theo cùng một cách.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng câu lệnh IF / ELSE để cập nhật hoặc tạo mục nhập nút xml mới trong Sql

  2. Cách tạo Ràng buộc Duy nhất trên Cột cho Bảng đã tồn tại - Hướng dẫn SQL Server / TSQL Phần 97

  3. Khôi phục cơ sở dữ liệu trong SQL Server 2017

  4. đặt hàng bởi newid () - nó hoạt động như thế nào?

  5. Làm thế nào để biết nếu một cột được tính toán là xác định trong SQL Server