При сохранении даты и времени на сервере sql (тип datetime), в каком формате она хранится? - PullRequest
9 голосов
/ 12 июля 2011

При сохранении значения datetime в sql server 2008, используя тип datetime, в каком формате оно будет хранить значение?

Это количество секунд с 1970 (или что-то еще)?

На стороне приложения (.net) я передаю объект datetime.

Когда я просматриваю строки таблицы в анализаторе запросов, отформатирует ли она их в соответствии с моими настройками культуры или я точно просматриваю то, что хранится в БД?

Ответы [ 4 ]

13 голосов
/ 12 июля 2011

Внутренне, согласно SQLDenis, они хранятся как два целых числа
http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/how-are-dates-stored-in-sql-server

Когда вы просматриваете их в анализаторе запросов, вы видите оцененные числа.

Это , а не , сохраненное как "время Unix"
http://en.wikipedia.org/wiki/Unix_time

6 голосов
/ 12 июля 2011

Он хранится в виде числа с плавающей запятой, представляющего дни с 1 января 1900 года. Если вы округлите его, приведя к int, то останется только часть даты:

select  cast(cast(getdate() as int) as datetime)
-->
2011-07-12 00:00:00.000

Или если вы добавитечисло к нему, это добавляет количество дней.Например, добавление 0,5 эквивалентно добавлению 12 часов:

select  getdate() + 0.5
-->
2011-07-12 11:22:09.927

Подробнее см. В этой статье MSDN .

Datetime не включает информацию о формате;Анализатор запросов может отображать его любым удобным для него способом.Вероятно, он попытается выполнить региональные настройки вашего клиентского ПК.

0 голосов
/ 07 ноября 2016

Вот код для просмотра, как он хранится:

DECLARE @now datetime, @bytenow binary(8)
SELECT @now = getdate()
SELECT @bytenow = convert(binary(8), @now)
SELECT @now AS fulldate, @bytenow AS internal,
       convert(int, substring(@bytenow, 1, 4)) AS days,
       convert(int, substring(@bytenow, 5, 8)) AS ticks

Это показывает 2 значения:

  1. первые 4 байта - это число, представляющее дни с 1 по 1900
  2. вторые 4 байта - это количество тактов с полуночи, когда в одной секунде 300 тактов.
0 голосов
/ 16 мая 2013
DateTime doj = new DateTime();

System.Globalization.CultureInfo c1=new System.Globalization.CultureInfo("en-GB",true);
doj = DateTime.Parse(Txtdoj.Text.Trim(), c1, System.Globalization.DateTimeStyles.NoCurrentDateDefault);

использование ..Это

используйте запрос для отображения даты и времени выберите convert (varchar (max), doj, 103) как doj из tbl_registration

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...