2010-09-06 18 views
9

Lütfen bana bu konuda yardım edin, i Bigint'den datetime'a bir değer dönüştürmek istiyorum. i bir kayıtta bu değere sahip build_start_time_server sahada TeamCity sunucusundan ait TARİHİ tablo okuma örnek im için 1283174502729.Bigint'den datetime detetime değerine dönüştürün

Nasıl datetime değerine dönüştürmek ???

Teşekkürler

+0

Umarım etiketleri daha belirgin hale getirmek için etiketleri değiştirdim. Etiket alanında "sql server" kullanırsanız, * sql * etiketinin yanı sıra * server * etiketinin altına gireceğini, ancak * sql-server * etiketinin altında olmasını istediğinizi muhtemelen unutmayın. – krock

+1

1283174502729 için hangi tarih değeri seçin? – gbn

cevap

22

Bu sizin için çalışıyor mu? Bu SQL Server 2005 tarihinde şu anda 30-8-2010 13:21:42 verir:

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

büyük olduğunu dateadd işlevi, bir sayı ile çalışmaz çünkü 1000 bölü ettik. Yani biraz hassasiyeti kaybedersiniz, ancak kullanımı daha basittir.

+1

Krock, bu mükemmel. Yardımlarınız için teşekkürler. – Chris

+0

@Chris Eğer bu doğruysa cevabı kabul etmelisiniz. –

2

Biraz farklı yaklaşım:

Senaryonuz:

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

Jenerik kodu:

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

Çıktı:

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

Hala oyu anlamadım. Hata var mı? Bu 2008R2 için çalışıyor. Verimsiz mi? Ne geliştireceğimi bilmiyorum, nasıl geliştirebilirim. – stinkyjak

+0

İndirgemenin ne yaptığına veya neden işe yarayacağına dair herhangi bir açıklama yapmadan bir kodun sadece cevap vermesi olduğunu düşünürdüm. – iamdave

0

DATEADD (ikinci, YourValue, CAST ('1970-01-01 00:00:00' datetime) AS)

+0

Downvoted. "Deyimi veri türüne dönüştüren aritmetik taşma hatası." soruda verilen verilerle. – UnhandledExcepSean

+0

Yine de biraz ince ayarlarla işe yarayabilir, belki de poster biraz çalışabilir mi?(onu cesaretlendirmek için aşağı çekildi :)) – Gar

0

aşağıdaki hesaba yeni bir SQL terminolojiyi alır ve milisaniye dönecektir (can Ayrıca hesaplanmış bir alanda kullanılmak üzere değiştirilebilir.) [SQL Server 2012 veya sonrası]

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)); 
İlgili konular