これを手伝ってください、Bigintからdatetimeに値を変換したいと思います。たとえば、私は[〜#〜] history [〜#〜]teamcity server、フィールド上build_start_time_server i 1つのレコード1283174502729にこの値があります。
どうすれば日時値に変換できますか?
ありがとう
これはうまくいきますか? 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関数がこれほど大きな数では機能しないためです。したがって、精度は少し低下しますが、使用ははるかに簡単です。
少し異なるアプローチ:
あなたのシナリオ:
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/
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)
以下は新しい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));