2010-09-06 40 views
9

hãy giúp tôi với điều này, tôi muốn chuyển đổi một giá trị từ Bigint thành datetime. Ví dụ im đọc LỊCH SỬ bảng TeamCity máy chủ, trên các lĩnh vực build_start_time_server tôi có giá trị này trên một bản ghi 1283174502729.Chuyển đổi Từ Bigint thành giá trị ngày giờ

Làm thế nào tôi có thể chuyển đổi sang giá trị datetime ???

Cảm ơn

+0

Tôi đã thay đổi thẻ để hy vọng làm cho chúng cụ thể hơn. Lưu ý rằng nếu bạn sử dụng "máy chủ sql" trong trường thẻ, thẻ này sẽ đi theo thẻ * sql * cũng như thẻ * server * nhưng không nằm trong thẻ * sql-server * có thể là những gì bạn muốn. – krock

+1

Giá trị datetime nào bạn muốn cho 1283174502729? – gbn

Trả lời

22

Tính năng này có phù hợp với bạn không? Nó trả về 30-8-2010 13:21:42 tại thời điểm trên SQL Server 2005:

select dateadd(s, convert(bigint, 1283174502729)/1000, convert(datetime, '1-1-1970 00:00:00')) 

Tôi đã chia cho 1000 vì hàm dateadd sẽ không hoạt động với số lớn. Vì vậy, bạn mất một chút chính xác, nhưng nó là đơn giản hơn nhiều để sử dụng.

+1

Krock, thats là hoàn hảo. Thanx vì sự giúp đỡ của bạn. – Chris

+0

@Chris nếu điều này đúng, bạn nên chấp nhận câu trả lời. –

2

cách tiếp cận Hơi khác nhau:

kịch bản của bạn:

SELECT dateadd(ms, 1283174502729/86400000, (1283174502729/86400000) + 25567) 
FROM yourtable 

đang Generic:

SELECT dateadd(ms, yourfield/86400000, (yourfield/86400000) + 25567) 
FROM yourtable 

Output:

August, 30 2010 00:00:14 

SQL Fiddle: http://sqlfiddle.com/#!3/c9eb5a/2/0

2
CAST(SWITCHOFFSET(CAST(dateadd(s, convert(bigint, [t_stamp])/1000, convert(datetime, '1-1-1970 00:00:00')) AS DATETIMEOFFSET), DATENAME (TZoffset, SYSDATETIMEOFFSET())) AS DATETIME) 
+0

Tôi vẫn không hiểu phiếu bầu. Có lỗi không? Điều này làm việc cho 2008R2. Nó có hiệu quả không? Làm thế nào tôi có thể cải thiện nếu tôi không biết phải cải thiện điều gì. – stinkyjak

+0

Tôi sẽ tưởng tượng downvote là để cung cấp một mã chỉ trả lời mà không có bất kỳ lời giải thích như những gì nó đang làm hoặc tại sao nó hoạt động. – iamdave

0

DATEADD (thứ hai, YourValue, CAST ('1970/01/01 00:00:00' AS datetime))

+0

Bị bỏ qua. "Biểu thức chuyển đổi lỗi số học thành int kiểu dữ liệu". với dữ liệu được cung cấp trong câu hỏi. – UnhandledExcepSean

+0

Tuy nhiên với một chút tinh chỉnh nó có thể làm việc, có lẽ áp phích có thể làm việc nó ra một chút?(upvoted khuyến khích anh ta một chút :)) – Gar

0

Sau đây có thuật ngữ SQL mới vào tài khoản và sẽ trả lại mili giây (có thể cũng được sửa đổi để sử dụng trong trường được tính toán.) [SQL Server 2012 hoặc mới hơn]

declare @StartDate datetime2(3) = '1970-01-01 00:00:00.000' 
, @milliseconds bigint = 1283174502729 
, @MillisecondsPerDay int = 60 * 60 * 24 * 1000 -- = 86400000 

SELECT DATEADD(MILLISECOND, TRY_CAST(@milliseconds % @millisecondsPerDay AS 
INT), DATEADD(DAY, TRY_CAST(@milliseconds/@millisecondsPerDay AS INT), 
@StartDate)); 
Các vấn đề liên quan