如何解决:DateAdd结果为DATETIME的超出范围的值?

时间:2017-02-06 20:14:40

标签: sql sql-server tsql

我基本上是以天数格式计算两个日期之间的差异:小时:分钟:秒

CONVERT(varchar, datediff (s, [CreatedDate], [ClosedDate]) / (60 * 60 * 24)) + ':' + CONVERT(varchar, dateadd(s, datediff (s, [CreatedDate], [ClosedDate]), CONVERT(datetime2, '0001-01-01')), 108) AS Length

当CreatedDate和ClosedDate在DATETIME2中时,上述工作。

但是当他们在DATETIME时给我这个错误:

  

导致将varchar数据类型转换为日期时间数据类型   在超出范围的价值。

CONVERT(varchar, datediff (s, [CreatedDate], [ClosedDate]) / (60 * 60 * 24)) + ':' + CONVERT(varchar, dateadd(s, datediff (s, [CreatedDate], [ClosedDate]), CONVERT(datetime, '0001-01-01')), 108) AS Length

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

一种方法是获取日期之间的秒数,使间隔“实际上是从零开始的日期时间:

dateadd(second, datediff(second, [CreatedDate], [ClosedDate]), 0)

然后将其转换为“dd hh:mi:ss”格式:

right(convert(varchar(255),
              dateadd(second, datediff(second, [CreatedDate], [ClosedDate]), 0)
              120), 11)

在SQL Server 2012+中,您可以使用format()