SQL Server で bigint (UNIX タイムスタンプ) を datetime に変換するにはどうすればいいですか? 質問する

SQL Server で bigint (UNIX タイムスタンプ) を datetime に変換するにはどうすればいいですか? 質問する

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 年より大きい年を表すタイムスタンプを変換できます。

おすすめ記事