首页 文章

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

提问于
浏览
0

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

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 回答

  • 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() .

相关问题