Chỉ cần trừ hai giá trị ngày giờ và nhân với 24:
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
một kịch bản thử nghiệm có thể là:
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
này hoạt động bởi vì tất cả datetimes được lưu trữ nội bộ như một cặp số nguyên, số nguyên đầu tiên là số ngày kể từ ngày 1 tháng một năm 1900, và số nguyên thứ hai (đại diện cho thời gian) là số() bọ ve kể từ nửa đêm. (Đối với SmallDatetimes số nguyên phần thời gian là số phút kể từ nửa đêm). Mọi số học được thực hiện trên các giá trị sử dụng phần thời gian như một phần của một ngày. 6 giờ sáng = 0,25, buổi trưa = 0,5, v.v ... Xem MSDN link here để biết thêm chi tiết.
Vì vậy, Cast ((@ Dt2 - @ Dt1) dưới dạng Float) cung cấp cho bạn tổng số ngày giữa hai thời gian biểu. Nhân với 24 để chuyển đổi thành giờ.Nếu bạn cần tổng số phút, nhiều theo phút mỗi ngày (24 * 60 = 1440) thay vì 24 ...
LƯU Ý 1: Điều này không giống như dấu chấm chấm hoặc đánh dấu javaScript - dấu tích này là khoảng 3,33 mili giây.
Nguồn
2009-11-20 14:19:56
Ý tưởng tuyệt vời. BTW - các chức năng tương tự tồn tại trong Net. Vì vậy, điều này rất hữu ích trong VB.Net hoặc C#. – Jeff
Tại sao không DATEDIFF (MINUTE, start_date, end_date)/60.0 – irfandar
@irfandar 'datepart' được chuyển đến' DATEDIFF' sẽ kiểm soát độ phân giải của đầu ra. Ví dụ: nếu 'start_date' và' end_date' khác nhau sau 59 giây, thì 'DATEDIFF (MINUTE, start_date, end_date)/60.0' sẽ trả về 0, nhưng' DATEDIFF (giây, start_date, end_date)/3600.0' sẽ trả về 0.0163888 (59/3600). –