2012-09-24 86 views
9

Ở đây tôi có một bảng với một cột time (datatype là integer), bây giờ tôi cần phải chuyển đổi các giá trị số nguyên sang định dạng thời gian HH:MM:SS:00 trong SQL Server 2008.Làm thế nào để chuyển đổi một số nguyên (thời gian) thành HH: MM: SS :: 00 trong SQL Server 2008?

Cũng cần làm rõ trong các định dạng time trên, cho dù 00 đại diện mili giây?

Vui lòng trợ giúp về điều này.

ví dụ: 23421155 đại diện cho 23: 42: 11: 55; 421151 đại diện cho 00: 42: 11: 51

Hy vọng rằng hiện tại đã rõ ràng.

+4

Định dạng số là gì? –

+0

Tôi không biết định dạng thời gian mà họ đã sử dụng, nhưng đây là một ví dụ 10455836. – Praveen

+8

Bạn cần biết số đó có nghĩa là gì trước khi bất kỳ ai có thể cho bạn biết cách chuyển đổi nó thành một thời điểm. –

Trả lời

14
declare @T int 

set @T = 10455836 
--set @T = 421151 

select (@T/1000000) % 100 as hour, 
     (@T/10000) % 100 as minute, 
     (@T/100) % 100 as second, 
     (@T % 100) * 10 as millisecond 

select dateadd(hour, (@T/1000000) % 100, 
     dateadd(minute, (@T/10000) % 100, 
     dateadd(second, (@T/100) % 100, 
     dateadd(millisecond, (@T % 100) * 10, cast('00:00:00' as time(2)))))) 

Kết quả:

hour  minute  second  millisecond 
----------- ----------- ----------- ----------- 
10   45   58   360 

(1 row(s) affected) 


---------------- 
10:45:58.36 

(1 row(s) affected) 
+0

Thông tin bổ sung theo kiểu dữ liệu 'thời gian' có thể được yêu thích ở đây: http://technet.microsoft.com/en-us/library/bb677243.aspx – Sandr

+0

Đó là 4 năm rưỡi sau, nhưng điều này sẽ được chấp nhận làm câu trả lời . Đó chính xác là những gì tôi cần –

1

Bạn có thể sử dụng chuyển đổi thời gian sau trong SQL như thế này:

--Convert Time to Integer (Minutes) 
DECLARE @timeNow datetime = '14:47' 
SELECT DATEDIFF(mi,CONVERT(datetime,'00:00',108), CONVERT(datetime, RIGHT(CONVERT(varchar, @timeNow, 100),7),108)) 

--Convert Minutes to Time 
DECLARE @intTime int = (SELECT DATEDIFF(mi,CONVERT(datetime,'00:00',108), CONVERT(datetime, RIGHT(CONVERT(varchar, @timeNow, 100),7),108))) 
SELECT DATEADD(minute, @intTime, '') 

Kết quả: - Thời gian trong vài phút và 1900-01- 01 14: 47: 00.000 < - Số phút đến thời gian

6

Chuyển đổi số nguyên thành một chuỗi và sau đó bạn có thể sử dụng hàm STUFF để chèn dấu hai chấm của bạn vào chuỗi thời gian. Một khi bạn đã làm điều đó, bạn có thể chuyển đổi chuỗi thành một kiểu dữ liệu thời gian.

SELECT CAST(STUFF(STUFF(STUFF(cast(23421155 as varchar),3,0,':'),6,0,':'),9,0,'.') AS TIME) 

Đó phải là cách đơn giản nhất để chuyển đổi nó thành một thời điểm mà không làm bất cứ điều gì phát điên.

Trong ví dụ của bạn, bạn cũng có một int trong đó các số 0 đứng đầu không có ở đó. Trong trường hợp đó, bạn có thể đơn giản làm điều gì đó như sau:

SELECT CAST(STUFF(STUFF(STUFF(RIGHT('00000000' + CAST(421151 AS VARCHAR),8),3,0,':'),6,0,':'),9,0,'.') AS TIME) 
Các vấn đề liên quan