Конечно, есть способ сохранить значение даты до 1-1-1900 в столбце, отличном от varchar? Или мне действительно нужно вырвать это и создать свою собственную библиотеку datetime для различий дат, сортировки и т. д.?
Да, я понимаю, как на самом деле хранятся datetime (целочисленное значение с определенной даты), но я помню, что много лет назад был еще один обходной путь. Теперь это просто ускользает от меня.





smalldatetime против datetime!
http://msdn.microsoft.com/en-us/library/ms187819.aspx
http://msdn.microsoft.com/en-us/library/ms182418.aspx
!
Да, тип DateTime SQL Server может хранить даты с 1 января 1753 года.
С оговоркой, что вы ошиблись, если хотите создать (например) приложение для генеалогии, чтобы записать кого-то, родившегося в 1536 году.
Чтобы получить больший диапазон, вы можете сохранить целое число (соответствующего диапазона) в базе данных и использовать что-то вроде «Unix time», чтобы интерпретировать его в своем коде.
@JoelFan - да, вы можете хранить как целое число или строку - или использовать datetime2 в SQL Server 2008, который имеет больший диапазон. Но «время Unix» - плохой пример, поскольку оно представляет только даты> = 01.01.1970.
@ Джо, неправда! Используя целые числа подписанный, вы можете представить любую дату во времени Unix ... отрицательное значение - до 01.01.1970
@JoelFan, я думаю, что Джо имеет в виду толкование календарей и т. д. 1582 г. был введен григорианский календарь. До этого использовался юлианский календарь. Тогда это был беспорядок, и я подозреваю, что дата 1753 года может также представлять некоторую календарную реформу ... простое добавление или вычитание единиц времени не обязательно приведет к правильным датам в далеком прошлом.
@erk, ну то, что он на самом деле сказал, что время Unix может представлять только даты> 01.01.1970. Это неверно, потому что он игнорирует тот факт, что значение может быть отрицательным для представления дат <01.01.1970. «Минимальная представимая дата - пятница 13 декабря 1901 года, а максимальная представимая дата - вторник 19 января 2038 года»
@JoelFan, да, в 1901-12-13 ты был бы в безопасности от любых проблем с календарем. OP требует поддержки дат до 1900 года. Для этого вам нужно использовать bigint. У меня нет запущенного и работающего SQL-сервера, но оценка подсказывает мне, что вы можете вернуться к временам кроманьонцев ... и если вы предоставите функцию, вы можете быть уверены, что пользователь предоставит достаточно большой (достаточно маленький ?) value ... Вот почему время Unix здесь проблематично.
@erk, 1753 как раз представлял собой более широкое распространение григорианского календаря (а именно его принятие Британской империей). Было несколько веков, когда использовались оба календаря. Изменение было очень медленным.
SQL Server 2008 имеет тип данных DATE, который может находиться в диапазоне от 0001-01-01 до 9999-12-31.
В предыдущих версиях ваш SOL, если вам нужна дата до 1753-01-01 (минимальное значение для DATETIME).
Спасибо, да, я сказал разработчику внести это изменение, и у них все еще была та же проблема. Затем, когда я увидел статью о msdn, я попросил их обновить соединение и повторить попытку, конечно же, на этот раз сработало datetime. (Или они не применили изменения изначально).