2014-09-22 17 views
8

làm thế nào để có được chính xác thời gian khác biệt giữa hai cộtTime Difference trong chuyển đỏ

ví dụ:

col1 date is 2014-09-21 02:00:00 
    col2 date is 2014-09-22 01:00:00 

đầu ra như

result: 23:00:00 

Tôi nhận được kết quả như

Hours Minutes Seconds 
-------------------- 
    3 3  20 
    1 2  30 

sử dụng hàng đợi sau ry

SELECT start_time, 
     end_time, 
     DATE_PART(H,end_time) - DATE_PART(H,start_time) AS Hours, 
     DATE_PART(M,end_time) - DATE_PART(M,start_time) AS Minutes, 
     DATE_PART(S,end_time) - DATE_PART(S,start_time) AS Seconds 
FROM user_session 

nhưng tôi cần như

Difference 
----------- 
    03:03:20 
    01:02:30 
+1

lẽ bạn có thể làm một số các thao tác thủ công bằng cách sử dụng 'DATEDIFF' (Ví dụ:' DATEDIFF (giờ, ngày1, ngày2) ') ... –

+0

nó sẽ chỉ lấy số giờ nhưng tôi cần HH: MI: SS – Benny

+0

Chỉ là một ví dụ cho giờ. Tôi đề nghị bạn sử dụng các chức năng tương tự cho các phần ngày tháng khác và thực hiện một số thao tác với chúng. –

Trả lời

10

Sử dụng DATEDIFF để có được những giây giữa hai datetimes:

DATEDIFF(second,'2014-09-23 00:00:00.000','2014-09-23 01:23:45.000') 

Sau đó sử dụng DATEADD để thêm giây để '1900-01- 01 00:00:00 ':

DATEADD(seconds,5025,'1900-01-01 00:00:00') 

Sau đó CAST kết quả vào một loại LÚC NÀO dữ liệu (lưu ý rằng đây giới hạn bạn đến 24 giờ max):

CAST('1900-01-01 01:23:45' as TIME) 

Sau đó LTRIM phần ngày giá trị ra khỏi dữ liệu TIME (như được phát hiện bởi Benny). Dịch chuyển đỏ không cho phép sử dụng TIME thực tế dữ liệu được lưu trữ:

LTRIM('1900-01-01 01:23:45','1900-01-01') 

Bây giờ, làm điều đó trong một bước duy nhất:

SELECT LTRIM(DATEADD(seconds,DATEDIFF(second,'2014-09-23 00:00:00','2014-09-23 01:23:45.000'),'1900-01-01 00:00:00'),'1900-01-01'); 

:)

+0

Bạn bè tuyệt vời. Làm việc chính xác khi cần thiết. Cảm ơn bạn rất nhiều ...... :) – Benny

+0

tôi sử dụng ltrim() thay vì cast(). – Benny

+0

Điều này thật tuyệt vời. –

1
SELECT LTRIM(DATEADD(seconds,DATEDIFF(second,'2014-09-23 00:00:00','2014-09-23 01:23:45.000'),'1900-01-01 00:00:00'),'1900-01-01'); 
+0

Bí quyết tuyệt vời, tôi chỉ cần sử dụng bản thân mình. :-D –