SQL Server的Date值是否存储为单个int?


8

SQLDenis所述,SQL Server在DATETIME内部存储为两个INT值。

DATE类型(SQL Server 2008+)作为单个 存储是否正确(通过逻辑扩展名)INT

Answers:


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个字节。如果我们查看该行的内存转储,则会看到内部存储组件的十六进制值: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

嗯,那时间呢?
方位角

@Azimuth问题是关于date哪个没有时间。
亚伦·伯特兰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.