cast varchar浮动到bigint

时间:2013-03-30 12:48:47

标签: tsql casting varchar bigint

我正在尝试将varchar转换为bigint。然后将其插入到int列中。我发现我没有得到预期的价值。然后我尝试了以下陈述:

DECLARE @varData VARCHAR(50)

SET @varData  = '0000019.33'

select cast(@varData *cast(100 as float) as bigint)

select cast(@varData *cast(100 as float) as varchar)

select cast(cast(@varData *cast(100 as float) as varchar) as float)

结果:

1932

1933

1933

我无法理解为什么会出现这种差异。但是当我将值更改为0000029.33时,结果没有差异。

我被困住了,不知道为什么会这么发生。需要帮助...... !!!

2 个答案:

答案 0 :(得分:1)

请参阅此Difference between numeric,float and decimal in sql server

对于你的问题,你应该尝试CAST @vardata作为数字,像这样

SELECT CAST(CAST(@varData AS numeric(27,9)) * 100  AS bigint)

答案 1 :(得分:1)

发生这种情况是因为sql围绕数据,所以让我们说如果你选择错误的整数而不是2.97你会得到3。 现在试着想象如果你想转换0.000002,将丢失多少数据:) 希望你现在好好理解

DECLARE @varData VARCHAR(50),
        @float float,
        @bigint bigint

SET @varData  = '0000019.33'    
set @bigint = convert ( bigint, (convert ( float, @vardata )) )
print @bigint
--or
set @float= convert ( float, @vardata )
set @bigint=convert ( bigint, @float)
print @bigint