【问题标题】:Convert int to timespan in SQL script (SQL Server)在 SQL 脚本 (SQL Server) 中将 int 转换为时间跨度
【发布时间】:2018-03-20 06:33:37
【问题描述】:

查询是在 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

输出应该是什么样子:"Hans", "Muster", 5, 400

提前致谢!

【问题讨论】:

  • 请以格式化文本(而非图像)形式分享示例数据和所需输出
  • 那是非标准的 SQL。您使用的是哪种 DBMS 产品? (看起来像 T-SQL / SQL Server)
  • 它的 SQL Server。对不起,我不习惯 sql。

标签: sql json type-conversion


【解决方案1】:

最后也没那么难。我没有在 sql 查询中将 int 解析为时间跨度。无论我尝试什么,我在每一个变化中都有一个错误。 这就是我的解决方案:

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

在控制器中传入的 ViewModel 中,我对其进行解析:

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

【讨论】:

    【解决方案2】:

    您遇到的问题是 SUM 函数。因为您正在尝试对时间进行求和。您需要使用 DATEADD 功能。 这样想,如果在 13:50 到 21:45 之间尝试求和,它就行不通了

    【讨论】:

      猜你喜欢
      • 2015-10-01
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多