首页 > 解决方案 > 如何将 Sum 用于字符串函数?

问题描述

员工有多个合同工时,我想将每个员工的合同总工时相加,但总合同工时列中的数据采用以下格式: 35.00 - 合同工时 尝试运行以下脚本时:

SELECT DISTINCT
   EmpId
  ,Substring(Contract_Hours,1,5) AS TotalContractHours
  ,SUM(CAST(Substring(Contract_Hours,1,5) AS INT))
  --OR ,SUM(CAST(Substring(Contract_Hours,1,5) AS  decimal(1,1)))

FROM tbl.Employee

GROUP BY 
  EmpID
 ,Substring(Contract_Hours,1,5)

我收到错误:

消息 245,第 16 级,状态 1,第 1 行

将 varchar 值“28.00”转换为数据类型 int 时转换失败。

我试图在没有总和聚合的情况下运行它并且它有效,所以我认为它与未转换的总和和数据类型有关

我究竟做错了什么?请帮忙

标签: sqlsql-serversumsubstring

解决方案


由于时间格式为 xx.yy,因此您有 2 个选项:

1.只取整数部分并转换为int:

SELECT EmpId
  ,Substring(Contract_Hours,1,2) AS TotalContractHours
  ,SUM(CAST(Substring(Contract_Hours,1,2) AS INT))
FROM tbl.Employee
GROUP BY 
  EmpID
 ,Substring(Contract_Hours,1,2)

2.取整部分并转换为小数:

 SELECT EmpId
      ,Substring(Contract_Hours,1,5) AS TotalContractHours
      ,SUM(CAST(Substring(Contract_Hours,1,5) AS DECIMAL(18,2)))
    FROM tbl.Employee
    GROUP BY 
      EmpID
     ,Substring(Contract_Hours,1,5)

推荐阅读