Решението да се използва 1 януари 1753 г. (1753-01-01
) като минималната стойност на дата за дата и час в SQL Server се връща към произхода си в Sybase.
Значението на самата дата обаче може да се припише на този човек.
Филип Станхоуп, 4-ти граф Честърфийлд. Кой управлява Закона за календара (нов стил) от 1750 г. през британския парламент. Това даде закон за приемането на григорианския календар за Великобритания и тогавашните й колонии.
Имаше някои липсващи дни (връзка за интернет архив) в британския календар през 1752 г., когато най-накрая е направена корекцията от юлианския календар. 3 септември 1752 г. до 13 септември 1752 г. са загубени.
Калън Дилейни обясни избора по този начин
И така, с 12 загубени дни, как можете да изчислите дати? Например, как можете да изчислите броя на дните между 12 октомври 1492 г. и 4 юли 1776 г.? Включвате ли тези пропуснати 12 дни? За да се избегне необходимостта от решаване на този проблем, първоначалните разработчици на Sybase SQL Server са решили да не разрешават дати преди 1753 г. Можете да съхранявате по-ранни дати, като използвате полета за знаци, но не можете да използвате никакви функции за дата и час с по-ранните дати, които съхранявате в полета за знаци.
Изборът на 1753 г. наистина изглежда донякъде англоцентричен, тъй като много католически страни в Европа са използвали календара в продължение на 170 години преди британското въвеждане (първоначално забавено поради противопоставяне на църквата). Обратно, много страни реформират календарите си едва много по-късно, 1918 г. в Русия. Всъщност Октомврийската революция от 1917 г. започна на 7 ноември по григорианския календар.
И двете datetime
и новият datetime2
типът данни, споменат в отговора на Джо, не се опитвайте да отчитате тези местни различия и просто използвайте Григорианския календар.
Така че с по-големия диапазон на datetime2
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
Връща
Sep 8 1752 12:00AM
Една последна точка с datetime2
Типът данни е, че използва пролептичния григориански календар, проектиран назад, доста преди действително да бъде изобретен, така че има ограничена употреба при работа с исторически дати.
Това контрастира с други софтуерни реализации, като класа Java Gregorian Calendar, който по подразбиране следва юлианския календар за дати до 4 октомври 1582 г., след което прескача до 15 октомври 1582 г. в новия григориански календар. Той правилно обработва юлианския модел на високосна година преди тази дата и григорианския модел след тази дата. Датата на преминаване може да бъде променена от обаждащия се чрез извикване на setGregorianChange()
.
Тук можете да намерите доста забавна статия, в която се обсъждат още някои особености при приемането на календара.