Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么从TSQL中的字符串创建早于1753年1月1日的日期会引发转换错误?_Sql_Sql Server_Tsql - Fatal编程技术网

为什么从TSQL中的字符串创建早于1753年1月1日的日期会引发转换错误?

为什么从TSQL中的字符串创建早于1753年1月1日的日期会引发转换错误?,sql,sql-server,tsql,Sql,Sql Server,Tsql,在SQL Server 2019中,我无错误地运行了以下代码: declare @d1 as datetime; set @d1 = cast('1 Jan 1753 00:00am' as datetime); select @d1 'date'; 但当我运行此代码时,它失败了: declare @d1 as datetime; set @d1 = cast('1 Jan 1752 00:00am' as datetime); select @d1 'date'; 给出错误: 味精242,

在SQL Server 2019中,我无错误地运行了以下代码:

declare @d1 as datetime;
set @d1 = cast('1 Jan 1753 00:00am' as datetime);
select @d1 'date';
但当我运行此代码时,它失败了:

declare @d1 as datetime;
set @d1 = cast('1 Jan 1752 00:00am' as datetime);
select @d1 'date';
给出错误:

味精242,第16级,第3状态,第5行
将varchar数据类型转换为datetime数据类型导致值超出范围

唯一的区别是第一个是1753年1月1日,第二个是1752年1月1日


感谢您抽出时间。

DATETIME
列的最短日期为1753年1月1日。改用
DATE
。它可以一直追溯到1/1/1。

从SQL Server 2008开始,我建议放弃
DATETIME
,因为它有各种限制(比如不支持1753年之前的日期)-如果只需要日期(而不是时间部分),请使用
DATETIME
,如果需要时间,请使用
DATETIME2(n)
,too@marc_s,似乎无法使用DATETIME2进行减法运算:操作数数据类型DATETIME2对于减法运算符无效。您应该使用适当的方法,例如
DATEADD(…)
-而不仅仅是从日期中减去
INT
,这到底是什么意思??你在减去什么?秒?分钟?小时?天?年?谢天谢地,这已经不受支持了@marc_s,我做了以下工作来获取两个日期之间的小时数:将@v1声明为DATETIME;`声明@v2为日期时间;设置@v1=cast('2021年1月1日00:00am'为日期时间);设置@v2=cast('2021年1月2日上午5:01'为日期时间);选择强制转换(@v2-@v1作为浮动)*24;`我这样做是因为DATEDIFF_BIG被抛出一个错误,即当日期相距太远时,数字太大。我怎样才能用DATETIME2做到这一点?