【发布时间】:2019-10-01 09:24:36
【问题描述】:
一个员工有多个合同工时,我想将每个员工的合同总工时相加,但总合同工时栏中的数据格式如下: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”转换为数据时转换失败 输入整数。
我尝试在没有 sum 聚合的情况下运行它并且它有效,所以我认为它与未转换的 sum 和数据类型有关
我做错了什么?请帮忙
【问题讨论】:
-
将整数存储为 varchar 的原因是什么?更改列的类型,不使用任何变通方法一切都会好起来
-
改为
DECMAL(18, 2),不是吗? -
此处无需执行 SELECT DISTINCT,您的 GROUP BY 不会返回重复项。
-
xx.yy 是什么意思? yy 是小数小时还是分钟?
-
yy 是分钟。我无权访问也无权更改数据类型。该列的数据类型是 nvarchar 并且使用字符串从合同小时数中提取 35.00 意味着必须转换数据类型以执行小时数的总和。
标签: sql sql-server sum substring