在SQL SERVER 2000表中,有一个名为Kpi of float type
的列。
当尝试将该列转换为varchar(cast(kpi as varchar(3)))
时,它会出错
Msg 232, Level 16, State 2, Line 1
Arithmetic overflow error for type varchar, value = 26.100000.
事情是该列只有一个不同的值,即26.1。 我无法理解为什么在将其转换为varchar时会出现错误!
答案 0 :(得分:2)
您的错误已在26.1中完全停止。
您已应用此命令:
cast(kpi as varchar(3))
首先:将从varchar(3)转换为varchar(4)(以获得完全停止后的第一个值)
所以你会:
此行在26.1
中转换值26.10000000然后你申请varchar(26.1)
不正确!
Varchar类型只需要整数值作为大小。
为什么要应用最后一个varchar?我认为你必须删除外部varchar并只留下强制转换函数
答案 1 :(得分:2)
请改为尝试:
declare @x float = 26.1
select left(@x,3)
结果将是26。
答案 2 :(得分:1)
非重复值为26.1, 4个字符长度,并且尝试将其强制转换为强制转换(kpi为varchar(3))...如果将其更改为强制转换( kpi as varchar(4))它会起作用并且得到26.1