0

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

请建议我使用什么数据类型来解决此问题。

4

1 回答 1

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;

The E notation appears only where you insert float into varchar (case 3)
As an added bonus, float only capture 15 significant figures so you'll lose precision. This is even worse with a number like 1000000000123456789

于 2013-05-24T07:09:26.710 回答