私はbigintにあるいくつかのタイムスタンプを持っています。ここでは1です:MSSQL bigint Unixタイムスタンプ(ミリ秒単位)
これはマイクロ秒の精度にダウンしています。私は現在、これを使用しています
:日時秒まで私を与えている
SELECT DATEADD(S, CONVERT(int,LEFT(1462924862735870900, 10)), '1970-01-01')
が、私は、少なくともミリ秒の精度を維持したいと思います。
DATEADDがbigintを処理できないため、bigintを切り捨ててintに変換した理由がわかりました。私は、誰かが私がこれを変換し、少なくともミリ秒の精度を維持するためのより良い方法を見つけ出すことができます願ってい
Arithmetic overflow error converting expression to data type int
:私は、私はこのエラーを取得することをしないと。
ご協力いただければ幸いです。ありがとう! @akoの助けを借りて
---- UPDATE ------
は、私は一緒にDATETIME2のいずれかミリ秒、マイクロ秒またはナノ秒でBIGINTタイムスタンプを取得し、返す関数を投げた(7)が100 nanosecond precisionです。おそらくもっと効率的かもしれませんが、関数は次のとおりです。
CREATE FUNCTION [dbo].[fn_tsConvert] (@ts bigint)
RETURNS DATETIME2(7)
AS BEGIN
DECLARE @ts2 DATETIME2(7)
-- MILLISECOND
IF(LEN(@ts) = 13)
SET @ts2 = DATEADD(HH,-4,DATEADD(MILLISECOND, @ts % 1000, DATEADD(SECOND, @ts/1000, CAST('1970-01-01' as datetime2(7)))))
-- MICROSECOND
IF(LEN(@ts) = 16)
SET @ts2 = DATEADD(HH,-4,DATEADD(MICROSECOND, @ts % 1000000, DATEADD(SECOND, @ts/1000000, CAST('1970-01-01' as datetime2(7)))))
-- NANOSECOND
IF(LEN(@ts) = 19)
SET @ts2 = DATEADD(HH,-4,DATEADD(NANOSECOND, @ts % 1000000000, DATEADD(SECOND, @ts/1000000000, CAST('1970-01-01' as datetime2(7)))))
RETURN @ts2
END
'次いで、(24×60×1000×60)' 2.'で割って一日にタイムスタンプを変換1.'時間のバランスを取って、変換された日付に追加する – Squirrel