转换为BigInt的数据包含Decimal,E继续使用加号

时间:2013-05-24 06:53:41

标签: sql sql-server sql-server-2008-r2

我正在使用“SQL Server 2008 R2”。我有一个名为TimeSpent varchar(250)列的表。我在其中存储了一些正整数值。我正在使用cast(TimeSpent as BigInt)将数据插入此表。插入后的一些数据转换为十进制,并带有'e +'一些值。例如1.27923e + 006,1.30313e + 006。

请建议我使用哪种数据类型解决此问题。

1 个答案:

答案 0 :(得分:2)

它存储为1.27923e + 006,因为

  • 这是一个varchar列:您不是将其存储为数字
  • 您的源值是浮动

您的CAST与此无关

示例:

DECLARE @foo TABLE (Id int, Wrong varchar (250), Correct bigint);
DECLARE @bignumber bigint = 12345678901234567;
DECLARE @bignumber2 float = 12345678901234567;
DECLARE @bignumber3 varchar(250) = '12345678901234567';

SELECT @bignumber;

INSERT @foo VALUES (1, @bignumber, @bignumber);
INSERT @foo VALUES (2, @bignumber2, @bignumber2);
INSERT @foo VALUES (3, CAST(@bignumber2 AS bigint), CAST(@bignumber2 AS bigint));
INSERT @foo VALUES (4, @bignumber3, @bignumber3);
INSERT @foo VALUES (5, CAST(@bignumber3 AS bigint), CAST(@bignumber3 AS bigint));

SELECT * FROM @foo;

E符号仅在您将浮点数插入varchar(情况3)的情况下出现 作为额外的奖励,浮动只捕获15个有效数字,因此您将失去精确度。对于像1000000000123456789

这样的数字,情况更糟