sql - 如何将 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 时转换失败。
我试图在没有总和聚合的情况下运行它并且它有效,所以我认为它与未转换的总和和数据类型有关
我究竟做错了什么?请帮忙
解决方案
由于时间格式为 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)
推荐阅读
- java - 使用消息正文的 java 粗体文本发送电子邮件
- numpy - 在布尔表达式中手动广播 numpy?
- json - 使用模板或工具编辑 (conf) json 文件
- vue.js - Vuejs 从扩展组件事件中更新父组件数据
- azure - 如何在 Azure 数据工厂中添加动态连接字符串
- java - 我的数组列表数据未显示在列表视图中仅包名称显示在列表视图中
- java - 在 try-with-resources 中打开连接 - 第二个资源取决于第一个
- javascript - Javascript 上的 mssql 语句
- google-apps-script - 环聊机器人如何在卡片消息中@提及用户
- jquery - Vue v-for 在幻灯片中没有正确渲染阴影