2012-03-01 42 views
22

Tôi cần phải so sánh 2 ngày và trả về số ngày ở giữa với 2 chữ số thập phân.TSQL DateDiff để trả về số ngày có 2 chữ số thập phân

Ví dụ:

khi so sánh

SubmittedDate = 2012-02-29 07:02:55.000 

FirstCall = 2012-02-29 12:12:19.000 

Đó là một sự khác biệt 5 giờ. Vì vậy, tôi sẽ quay trở lại 0,2 ngày

Tôi đã thử:

CAST(DATEDIFF(Hour, SubmittedDate, FirstCall)/30.0 AS DECIMAL(5,2)) As HoursBeforeFirstCall 
CAST(DATEDIFF(Day, SubmittedDate, FirstCall) AS DECIMAL(5,2)) As HoursBeforeFirstCall 

Không có vẻ làm việc.

Trả lời

32

Lấy DateDiff trong vài giây để thay thế, sau đó chia cho 86400.0. Điểm thập phân là bắt buộc.

+0

này hoạt động tuyệt vời. Có cách nào tôi có thể làm cho nó xuống đến 2 chữ số thập phân –

1

Làm thế nào về điều này.

select convert(decimal(12,2),convert(decimal(12,2),datediff(second,'2012-02-29 07:02:55.000','2012-02-29 12:12:19.000'))/60/60/24) 
3

Khi bạn đại diện cho một ngày như một con số, mỗi ngày được đại diện bởi 1.0 "đơn vị" rồi. Để có được khoảng thời gian của hai ngày dưới dạng số thập phân, bạn chỉ có thể trừ chúng.

SELECT CAST((@FirstCall - @SubmittedDate) AS NUMERIC(10, 2)) 
+0

Nếu ai đó sẽ sử dụng phương pháp này, tôi tin rằng bạn muốn chia cho '365.2425' – daveomcd

+0

@daveomcd Tại sao? Câu hỏi đặt ra là yêu cầu khoảng thời gian tính theo ngày, không nhiều năm và tôi không nghĩ rằng tính toán của bạn sẽ chính xác cho hầu hết các trường hợp. – JackAce

+0

Lời xin lỗi của tôi đã bỏ lỡ một phần về những ngày tôi đoán ... tại sao nó sẽ không chính xác trong nhiều năm? – daveomcd

0

Đây là những gì tôi đã thực hiện:

ROUND(SUM(DATEDIFF(ss,StartDateTime,EndDateTime)/60.0/60.0), 2) 
Các vấn đề liên quan