6

我正在尝试声明一个值为1001-01-01 00:00:00.000的日期时间变量

我尝试了以下方法但没有运气

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的变量?

4

4 回答 4

18

数据类型的最短有效日期DateTime是 1753 年 1 月 1 日。

尝试DATETIME2,使用:

DECLARE @d4 DATETIME2 = '1001-01-01'

最短有效日期DATETIME20001-01-01

于 2013-03-20T15:58:57.707 回答
4

你不能那样做。值可以具有的最早日期datetime是 1753-01-01。

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

declare @d1 datetime2 = '1001-01-01';
于 2013-03-20T15:59:16.417 回答
1

最小 SQL 日期时间是 1753 年 1 月 1 日,因此您的日期确实超出了范围。

于 2013-03-20T15:59:37.163 回答
0

SQLServer 日期时间必须是 1/1/1753 < X < 12/31/9999

http://msdn.microsoft.com/en-us/library/ms187819.aspx

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

于 2013-03-20T15:59:19.080 回答