我有一个存储过程返回电话呼叫数据摘要,其中一个摘要是总呼叫持续时间,可以是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} }。
据我所知,这是因为Excel使用02:59:21
表示“时间”值而SQL Server使用00/01/1900
。
有没有办法让我只能正常显示为小时和分钟的时间值?我宁愿避免使用字符串,因为它必须在其他地方用作值。
答案 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应显示正确的时间,并且您不必担心时代或闰年错误