2

PHP での SQL Server データベース ダンプの処理に問題があります。

datatime次のような値で呼び出される1つの列があります。

0x0000a0af00d7f2eb

PHP で、この列の日付と時刻の値を抽出する必要があります。利用可能な SQL Server がないため、明らかなソリューションを使用できませんCAST(0x0000a0af00d7f2eb AS datetime)

0000a0af00d7f2ebこの hex:は 4 バイトの日付と 4 バイトの時刻で作成されていると誰かが私に言いました。

だから私はそれを知っています:

(最初の 4 バイト) を 10 進数に変更する0000a0afと、1900 年からの日数が取得されます。これで問題なく動作します。

しかし、最後の 4 バイトを変更しようとすると (時間があるはず00d7f2ebです) : 10 進数に変換すると、理解できないものが得られます。真夜中からのミリ秒単位の時間である必要があり、この値が 3 倍低い場合もあります。

0000a0af00d7f2eb日付への変換を手伝ってくれる人はいますか? 時間は午前 5 時から午後 11 時の間で、その日は先週であることがわかっています。

4

2 に答える 2

2

Rene によってリンクされた他の質問のリンクされた記事によると、SQL Server は、ミリ秒ではなく、3.33 ミリ秒間隔を 4 バイトの 2 番目のセットに格納します。したがって、ミリ秒で計算している場合、実際には、本来あるべき時間の約 1/3 の時間が得られます。あなたの例を使用して、10進数に変換することから始めましょう

00d7f2eb -> 14152427 3.3ms 間隔

ここで、3.3 を掛けてミリ秒に変換し、1000 で割って秒を取得します。

14152427 * 3.3 / 1000 ~ 47127.58

したがって、これは午前 0 時から約 47,000 秒を表します。1時間を3600秒で割る

47127.58 / 3600 ~ 13.091

したがって、これは午前 0 時から約 13.1 時間の時間を表し、SQL Server で行われたキャストの結果と一致します。

于 2012-08-20T14:45:33.887 に答える
0
select CAST(0x0000a0af00d7f2eb AS datetime) as t

私のためにうまく働いています。そして、「2012年8月16日13:06:14-0700」を返します。

于 2012-08-20T10:05:58.183 に答える