将 expression 转换为数据类型 nvarchar 时出现算术溢出错误。

u010133107 2016-12-06 11:58:21
SQL service 执行下面SQL语句报“将 expression 转换为数据类型 nvarchar 时出现算术溢出错误。”:

SELECT Convert(decimal(10,3),((T1.OtherFuelConsumption*0.84)/T2.TEU))

FROM (
SELECT Year,
Period,
TimeGranularityID,
SUM(Performance) AS OtherFuelConsumption
FROM [HyperCubeODS].[KPI].[Performance]
WHERE IndicatorID IN(22,24,25,26)
GROUP BY Year,Period,TimeGranularityID
) T1
INNER JOIN
(
SELECT Year,
Period,
TimeGranularityID,
Performance AS TEU
FROM [HyperCubeODS].[KPI].[Performance]
WHERE IndicatorID = 1

)T2 ON T1.Year = T2.Year AND T1.Period = T2.Period AND T1.TimeGranularityID = T2.TimeGranularityID
WHERE
CONVERT(DATE,CONVERT(NVARCHAR(4),t1.YEAR)+'-'+ CONVERT(NVARCHAR(1),t1.Period *3 )+ '-01') >= '2016-01-01'
AND
CONVERT(DATE,CONVERT(NVARCHAR(4),t1.YEAR)+'-'+ CONVERT(NVARCHAR(1),t1.Period *3 )+'-01') <= '2016-01-31'

应该如何修改?
...全文
981 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2016-12-07
  • 打赏
  • 举报
回复
 CONVERT(NVARCHAR(1),t1.Period *3 )

你的 Period 最大只有 3 吗?
4 * 3 = 12,超过 NVARCHAR(1) 长度,就是溢出错误。
就这么简单。

又(和错误无关):
不管 Period 是月份还是季度,CONVERT(DATE,... + '-01') 总是1号,AND ... <= '2016-01-31'也用1号就可以了,没必要查询前还要算月底的日期。
u010133107 2016-12-07
  • 打赏
  • 举报
回复
自己也在调试,如果将T1的where条件只取一个indicatorid 号,则不报错,显示查询不到值。但后台Performance 表的T1,T2都有值啊,为什么?
u010133107 2016-12-07
  • 打赏
  • 举报
回复
楼上的正解,自己也是NVARCHAR()或者period * 这里调整。也通过了。
u010133107 2016-12-06
  • 打赏
  • 举报
回复
字段类型:YEAR NVARCHAR(4),PERIOD NVARCHAR(10),TIMEGRANULARITYID INT 1月份基础数据:例如: indicateid year period timegranularityid performance 22 2016 1 3 9200.000 24 2016 1 3 1000.000 25 2016 1 3 200.000 26 2016 1 3 500.000 1 2016 1 3 116909.000
卖水果的net 版主 2016-12-06
  • 打赏
  • 举报
回复
基础数据也给出来
u010133107 2016-12-06
  • 打赏
  • 举报
回复
没人回答吗?where条件时间应该怎么改?录入时间格式“2016-01-01” 是固定的。

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧