SQL Serverの日付値は単一の整数として格納されますか?


回答:


11

面白くするために、ページの内容を見てみましょう。

CREATE DATABASE floob;
GO
USE floob;
GO
CREATE TABLE dbo.experiment(d DATE NOT NULL);
CREATE CLUSTERED INDEX x ON dbo.experiment(d);
INSERT dbo.experiment SELECT SYSDATETIME();

DBCC IND('floob', 'dbo.experiment', 1);

部分的な結果(システムによって少し異なります):

----
13

PagePID iam_chain_type PageType
------- -------------- --------
229     In-row data    10
228     In-row data    1

それでは、228ページを見てみましょう。

DBCC TRACEON(3604, -1);
DBCC PAGE(13, 1, 228, 3);

部分的な結果。dの値が3バイトを占めていることがわかります。行のメモリダンプを見ると、内部ストレージコンポーネントの16進値c8350b02が表示されます。

ここに画像の説明を入力してください

SELECT DATEDIFF(DAY, CONVERT(DATE, '0001-01-01'), CONVERT(DATE, '2012-06-11'));

結果:

734664

そう:

SELECT CONVERT(VARBINARY(8), 734664);

結果:

0x000B35C8

(ページの内容と驚くほど似ていますが、ビットが逆の順序で反転していますか?)

次に:

SELECT DATEADD(DAY, CONVERT(INT, 0x000B35C8), CONVERT(DATE, '0001-01-01'))

結果:

2012-06-11

うーん、でも時間の部分はどうですか?
方位角

@方位角問題はdate、時間の部分がないものについてでした。
アーロンバートランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.