2

可能であれば、このタイムスタンプ(001281379300724)をSQLServerでYYYY-MM-DDhh:mm:ss形式に変換する必要があります。助言がありますか?

4

3 に答える 3

3

これは、タイムスタンプが UNIX エポック以降のミリ秒であると想定しています。最も近い秒にのみ変換されますが、ms を追加できます (以下を参照)。dateadd には int が必要なため、2 つの手順を使用する必要があります。最初に 60000 で割って分を追加し、次に秒を追加します。

DECLARE @yournum bigint
SET @yournum = 1281379300724     
SELECT DATEADD(ss, (@yournum / 1000)%60 , (DATEADD(mi, @yournum/1000/60, '19700101')))

与える

 2010-08-09 18:41:40.000

ミリ秒の精度を得るには:(うーん、おそらくもっと良い方法です)

DECLARE @yournum bigint
SET @yournum = 1281379300724     
SELECT DATEADD(ms, (@yournum%1000),DATEADD(ss, (@yournum / 1000)%60 , (DATEADD(mi, @yournum/1000/60, '19700101'))))

与える

2010-08-09 18:41:40.723
于 2012-07-20T16:40:10.970 に答える
1

次の方法で少し近づくことができます。

SELECT DATEADD(MINUTE, 1281379300724/1000/60, '19700101')

結果:

2010-08-09 18:41:00.000
于 2012-07-20T16:45:34.780 に答える
1

簡単な答えは、これが SQL タイムスタンプ列 (別名rowversion ) である場合、できないということです。タイプのドキュメントごと:

各データベースには、データベース内の rowversion 列を含むテーブルに対して実行される挿入操作または更新操作ごとにインクリメントされるカウンターがあります。このカウンターは、データベースの行バージョンです。これは、クロックに関連付けることができる実際の時間ではなく、データベース内の相対時間を追跡します。

...

Transact-SQL タイムスタンプ データ型は、ISO 標準で定義されているタイムスタンプ データ型とは異なります。

于 2012-07-20T16:41:26.493 に答える