在SQL脚本中将int转换为时间跨度(SQL Server)

时间:2017-10-09 06:13:12

标签: sql json type-conversion

查询是在sql脚本中完成的。
我的问题:
我需要将模型中的数据作为json传递。
这就是为什么我需要在sql脚本中将其转换为时间跨度。

--TEMP
DECLARE @startDate DATETIME
SET @startDate = '01-09-2016'

DECLARE @endDate DATETIME
SET @endDate = '03-10-2017'
--END


SELECT
Firstname,
Lastname,
COUNT(Token.Id) as Tokens,
**CONVERT(time, SUM(DATEDIFF(ss, Token.ArrivalTime, Token.CompletionTime)), 57) as [Time]**
FROM Employee
INNER JOIN Token ON Token.Employee_Id = Employee.Id
WHERE AssignmentTime >= @startDate and AssignmentTime <= @endDate
and Status = 2
GROUP BY Firstname, Lastname
ORDER BY Tokens DESC
FOR JSON PATH

错误是:

The explicit conversion from data type int to time is not allowed

输出应该是什么样的:&#34; Hans&#34;,&#34; Muster&#34;,5,400

提前致谢!

2 个答案:

答案 0 :(得分:1)

你遇到的问题是SUM函数。因为你试图对一个时间进行求和。您需要使用DATEADD函数。 如果尝试在13:50和21:45之间进行求和,那么就这样想

答案 1 :(得分:1)

最后它并没有那么难。我没有在SQL查询中解析int到timepan。无论我尝试什么,我在每个变体中都会出错。 多数民众赞成我的解决方案:

DATEDIFF(ss, Token.ArrivalTime, Token.CompletionTime) as TimeInSeconds

在控制器中传递的ViewModel中,我解析它:

    public int TimeInSeconds { get; set; }
    public TimeSpan Time
    {
        get { return TimeSpan.FromSeconds(TimeInSeconds); }
    }