You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL转换报错:varchar转int失败,求优化前后每日里程统计方案

问题分析与解决

错误原因

报错是因为'57.006'是带小数点的字符串,直接转int类型会失败——int仅支持整数,无法处理带小数的数值。另外原SQL的GROUP BY包含ma_desc,会按日期+单条记录描述分组,无法得到每日总里程的汇总结果。

修正后的SQL语句

按需求(按日统计优化前后总里程,分别命名为METERS BEFORE和METERS AFTER)调整后的SQL如下:

SELECT  
    s.datreg,
    -- 统计优化前每日总里程:先转decimal适配小数,再求和
    SUM(CONVERT(decimal(10,3), SUBSTRING(s.ma_desc,7,6))) AS [METERS BEFORE],
    -- 统计优化后每日总里程:通过定位"or."截取对应数值,再求和
    SUM(CONVERT(decimal(10,3), SUBSTRING(s.ma_desc, CHARINDEX('or.', s.ma_desc)+3, 7))) AS [METERS AFTER]
FROM S16T2 AS s
WHERE s.modul='MCAIDist'
GROUP BY s.datreg  -- 仅按日期分组,实现每日汇总
ORDER BY s.datreg DESC

关键调整点

  • 类型转换:先将字符串转为decimal(10,3)(适配三位小数的数值)再求和,避免转换失败;若不需要小数,可在求和后转int,例如CONVERT(int, SUM(CONVERT(decimal(10,3), ...)))。
  • 分组逻辑:移除GROUP BY中的ma_desc,仅按datreg分组,才能得到每日总里程的汇总结果。
  • 灵活截取优化后里程:用CHARINDEX('or.', s.ma_desc)定位标记位置,再偏移3位截取后续数值,比固定位置39更适配字符串长度变化的情况。

内容的提问来源于stack exchange,提问作者Andrijana K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:18:16