Các giá trị Ngày của SQL Server có được lưu dưới dạng một int không?


8

SQL Server lưu trữ DATETIMEbên trong dưới dạng hai INTgiá trị, như SQLDenis giải thích .

Là nó đúng (bằng cách mở rộng logic) mà DATEloại (SQL Server 2008+) được lưu trữ như một đơn INT ?

Câu trả lời:


11

Chỉ để cho vui, hãy xem những gì trên trang.

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);

Kết quả một phần (sẽ khác nhau trên hệ thống của bạn một chút):

----
13

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

Vì vậy, hãy nhìn vào trang 228:

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

Kết quả một phần. Chúng ta thấy rằng giá trị cho d chiếm 3 byte. Nếu chúng ta nhìn vào kết xuất bộ nhớ cho hàng, chúng ta sẽ thấy giá trị hex cho thành phần lưu trữ nội bộ: c8350b02- đó có thể là gì?

nhập mô tả hình ảnh ở đây

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

Kết quả:

734664

Vì thế:

SELECT CONVERT(VARBINARY(8), 734664);

Kết quả:

0x000B35C8

(Trông tương tự như những gì trên trang, chỉ với các bit được lật theo thứ tự ngược lại?)

Sau đó:

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

Kết quả:

2012-06-11

Hmm nhưng phần thời gian thì sao?
Azimuth

@Azimuth Câu hỏi là về việc datekhông có phần thời gian.
Aaron Bertrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.