web-dev-qa-db-ja.com

Bigintからdatetime値への変換

これを手伝ってください、Bigintからdatetimeに値を変換したいと思います。たとえば、私は[〜#〜] history [〜#〜]teamcity server、フィールド上build_start_time_server i 1つのレコード1283174502729にこの値があります。

どうすれば日時値に変換できますか?

ありがとう

16
Chris

これはうまくいきますか? SQL Server 2005では、現時点で30-8-2010 13:21:42を返します。

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

1000で除算しました。これは、dateadd関数がこれほど大きな数では機能しないためです。したがって、精度は少し低下しますが、使用ははるかに簡単です。

30
Rob

少し異なるアプローチ:

あなたのシナリオ:

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

一般的なコード:

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

出力:

August, 30 2010 00:00:14

SQLフィドル: http://sqlfiddle.com/#!3/c9eb5a/2/

6
Matt
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)
3
stinkyjak

以下は新しいSQL用語を考慮に入れ、ミリ秒を返します(計算フィールドで使用するために変更することもできます。)[SQL Server 2012以降]

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));
0
Arthur Teter