2011-08-25 86 views
1

不知道为什么此转换失败。SQL Server 2008 - 从字符串到int的转换失败

SELECT CAST('32.999' AS INT) 

引发错误说转换VARCHAR值时'32 0.000' 到数据 int类型

转换失败。

我知道我可以将其转换为Decimal,然后将其转换为Int但为什么32.000没有被转化为Int直接?

我在这里错过了什么吗?

- 编辑 -

我不关心小数点。我希望SQL忽略它们。

回答

5

32.000不能准确地表示为由于小数一个int。相反,如果你想要一个带有小数的数值,你可以使用浮点(或数字)数据类型。

Select CAST('32.000' as float) 

编辑:误读你的问题一点点。

我假设SQL尝试,最好保持你的意图。当它读入你正试图施放的数值有十进制值时,它会拒绝它。

+1

好点,但我不在乎小数点。我希望SQL忽略它们。 – Asdfg

+0

如果您将'32 .000'转换为浮点数,则该值的显示将为'32'。它不会尝试显示.000 – Zhais

+1

@Asdfg的十进制值,SQL不会让你忽略它们,除非你明确地告诉它这样做。一种方法是按照建议“CAST”。另一种方法是不要把它们放在首位。 –

1

使用SELECT CAST(ROUND('32.999',0,1) AS INT)和它工作得很好。

+1

请记住,如果您尝试舍入的值为'32.9',则结果为33. 但是,Round('32 .000',0,1)将在32中正确生成。 http: //msdn.microsoft.com/en-us/library/ms175003.aspx – Zhais

+0

正确。我也注意到了。感谢您指出了这一点。 – Asdfg

相关问题