SQL Server で UNIX タイムスタンプ (bigint) を DateTime に変換するにはどうすればよいですか?
ベストアンサー1
これは私にとってはうまくいきました:
Select
dateadd(S, [unixtime], '1970-01-01')
From [Table]
1970-01-01がなぜなのか疑問に思う人がいるかもしれないが、これはエポックタイム。
以下はWikipediaからの引用です。
1970年1月1日木曜日00:00:00協定世界時(UTC)から経過した秒数[1][注 1](うるう秒は含まない)。
2038年問題
さらに、DateAdd 関数は、int
追加する秒数を取得します。したがって、秒数を超える数を追加しようとすると、2147483647
算術オーバーフロー エラーが発生します。この問題を解決するには、追加を DateAdd の 2 つの呼び出しに分割します。1 つは年数用、もう 1 つは残りの秒数用です。
Declare @t as bigint = 4147483645
Select (@t / @oneyear) -- Years to add
Select (@t % @oneyear) -- Remaining seconds to add
-- Get Date given a timestamp @t
Declare @oneyear as int = 31622400
Select DateAdd(SECOND, @t % @oneyear, DateAdd(YEAR, @t / @oneyear, '1970-01-01'))
これにより、2038 年より大きい年を表すタイムスタンプを変換できます。