Sql server SQL声明日期时间-1001-01-01

Sql server SQL声明日期时间-1001-01-01,sql-server,datetime,Sql Server,Datetime,我试图声明一个值为1001-01-01 00:00:00.000的datetime变量 我尝试过以下方法,但没有成功 declare @d1 datetime = '1001-01-01'; declare @d2 datetime = 10010101; declare @d3 datetime = '1001-01-01 00:00:00'; declare @d4 datetime = cast ('1001-01-01' as datetime) 我得到以下错误 Msg 242, Le

我试图声明一个值为1001-01-01 00:00:00.000的datetime变量

我尝试过以下方法,但没有成功

declare @d1 datetime = '1001-01-01';
declare @d2 datetime = 10010101;
declare @d3 datetime = '1001-01-01 00:00:00';
declare @d4 datetime = cast ('1001-01-01' as datetime)
我得到以下错误

Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
Msg 8115, Level 16, State 2, Line 2
Arithmetic overflow error converting expression to data type datetime.
Msg 242, Level 16, State 3, Line 3
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
Msg 242, Level 16, State 3, Line 4
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

是否可以声明一个
datetime
变量,该变量可以保存值1001-01-01 00:00:00.000

数据类型的最小有效日期为1753年1月1日

尝试使用:


DATETIME2
的最小有效日期是
0001-01-01

您不能这样做。值可以具有的最早日期是1753-01-01

Sql Server的最新版本具有更大范围的数据类型:

declare @d1 datetime2 = '1001-01-01';

SQLServer日期时间必须为1/1/1753


您将无法将DateTime设置为该年,因此您可能希望将其存储为字符串,并将其留给上层langague处理。

SQL DateTime的最小值为1月11753日,因此您的日期确实超出范围。

DateTime
不是一种结构,而是一种数据类型。我认为您将其与.NET框架中的
DateTime
结构相混淆。您不需要强制转换日期文字来将其分配给
datetime2
变量。还有,是你否决了所有其他答案吗?@Guffa啊,是的,谢谢你的澄清:)。不,不是我,我会在每日重置时投票给你,感谢你的编辑澄清:)。你的答案没有错,根本不需要投反对票。好像有个开车经过的选民来了
declare @d1 datetime2 = '1001-01-01';