截断并转换为varchar

时间:2014-06-16 22:25:16

标签: sql sql-server

我有一个号码,我试图加入varchar,我不在乎是否会被截断。

我的问题是我不断收到这些错误,具体取决于我的尝试:

  

字符串或二进制数据将被截断。

     

varchar类型的算术溢出错误,值= 0.000052

以下是我目前的尝试:

declare @a as varchar(10), @b as varchar(10), @c as varchar(10)

set @a =cast(@b as float) / cast(@c as float)

DECLARE @temp TABLE
(
  [read] varchar(20), 
  [percent] varchar(10)
)
insert into @temp ([read],[percent])
  VALUES('text', @a)

我还尝试了以下第二行的一些内容:

set @a = cast( cast(@b as float) / cast(@c as float) as varchar())

一个奇怪的是,它在某些时候有效,但并非在所有时间都有效。我已经发现它只有在@a足够大且不是负面时才有效。当它是负数或小数时,我会得到一些上述错误。

1 个答案:

答案 0 :(得分:3)

如果您想将浮点数转换为字符串,我强烈推荐使用str()函数,该函数记录为here

在您的情况下,它看起来像:

set @a = str( cast(@b as float) / cast(@c as float), 10, 4)

其中104是您想要的比例和精度。

顺便说一句,在SQL中使用varchar()时,应始终包含长度。不依赖于默认值,因为它们可以根据表达式的使用位置而改变。