Каково внутреннее представление даты и времени на сервере sql?
-
16-09-2019 - |
Вопрос
Какова базовая структура данных значений даты и времени, хранящихся в SQL Server (2000 и 2005, если они разные)?Т.е. вплоть до байтового представления?
Предположительно, представление по умолчанию, которое вы получаете при выборе столбца даты и времени, представляет собой значение, специфичное для культуры, которое может быть изменено.То есть некоторая базовая структура, которую мы не видим, форматируется в ГГГГ-ММ-ДД ЧЧ:ММ:СС.ммм.
Причина, по которой я спрашиваю, заключается в том, что в моем отделе распространено мнение, что оно хранится в памяти буквально как ГГГГ-ММ-ДД ЧЧ:ММ:СС.ммм, но я уверен, что это не так.
Решение
Его хранится как 8-байтовое поле, способный принимать значения от 01.01.1753 до 31.12.9999, с точностью до 0,00333 секунды.
Детали предположительно непрозрачны, но большинство ресурсов (1), (2) что я нашел в сети, говорится следующее:
Первые 4 байта хранят количество дней с эпохи SQL Server (1 января 1900 года), а вторые 4 байта хранят количество тиков после полуночи, где «тик» составляет 3,3 миллисекунды.
Первые четыре байта имеют знак (могут быть положительными или отрицательными), что объясняет, почему могут быть представлены даты, предшествующие эпохе.