Что такое внутреннее представление datetime на сервере sql? - PullRequest
8 голосов
/ 17 июля 2009

Какова базовая структура данных значений даты и времени, хранящихся в SQL Server (2000 и 2005, если они отличаются)? До байтового представления?

Предположительно, представление по умолчанию, которое вы получаете, когда выбираете столбец datetime, является специфическим для данной культуры значением / может быть изменено. То есть некоторая базовая структура, которую мы не видим, форматируется в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС.ммм.

Причина, по которой я спрашиваю, состоит в том, что в моем отделе существует общее представление о том, что оно хранится в памяти буквально как ГГГГ-ММ-ДД ЧЧ: ММ: СС.ммм, но я уверен, что это не так.

1 Ответ

15 голосов
/ 17 июля 2009

Это , сохраняемое как 8-байтовое поле , с диапазоном значений от 1753-01-01 до 9999-12-31, с точностью до 0,00333 секунд.

Детали предположительно непрозрачны, но большинство ресурсов (1) , (2) , которые я обнаружил в Интернете, указывают следующее:

Первые 4 байта хранят количество дней с начала эпохи SQL Server (1 января 1900 г.), а вторые 4 байта хранят количество тактов после полуночи, где "такт" равен 3,3 миллисекунды.

Первые четыре байта подписаны (могут быть положительными или отрицательными), что объясняет, почему могут быть представлены даты раньше, чем эпоха.

...