将Excel链接到SQL Server中的时间聚合

时间:2013-12-04 16:33:49

标签: sql sql-server excel sql-server-2008

我有一个存储过程返回电话呼叫数据摘要,其中一个摘要是总呼叫持续时间,可以是1到100小时。

目前返回的代码是:

SELECT CAST(SUM(CAST(D.CallDuration AS FLOAT)) AS DATETIME) AS [Total Duration]
FROM MyTable D

对于24小时以下的值,1900-01-01 02:59:21.997返回值1900-01-02 07:51:24.997超过24小时,这是我所期望的。

我正在尝试使用OLE连接将其放入Excel仪表板中,但是当我这样做时,值1900-01-01 02:59:21.997(在公式栏中可见)显示为26:59:21而不是{{1} }。

Example image

据我所知,这是因为Excel使用02:59:21表示“时间”值而SQL Server使用00/01/1900

有没有办法让我只能正常显示为小时和分钟的时间值?我宁愿避免使用字符串,因为它必须在其他地方用作值。

1 个答案:

答案 0 :(得分:1)

您需要从日期中减去1(或2)

Excel将其基于12/31/1899的值作为0,但SQL服务器使用1/1/1900作为纪元(0)日期

另请注意,由于2/29/1900错误,如果你起床那么远,你需要从日期(即1440小时,或60天)减去2

SELECT [Total Duration] =
    case when SUM(CAST(D.CallDuration AS FLOAT)) > 60
         then CAST(SUM(CAST(D.CallDuration AS FLOAT)) AS DATETIME) -2
         else CAST(SUM(CAST(D.CallDuration AS FLOAT)) AS DATETIME) -1
         end
FROM MyTable D

更简单的解决方案:

Select SUM(CAST(D.CallDuration AS FLOAT)) as [Total Duration]

将此值格式化为[h]:mm应显示正确的时间,并且您不必担心时代或闰年错误