从varchar转换/转换为没有足够小数空格的数字?

时间:2012-12-06 19:58:43

标签: sql-server tsql

我将一个文件导入到临时表中,并导入了所有varchar类型的数字字段。那些数字字段最终必须转到一个定义为数字的字段(28,6),我将无法更改目标。

我遇到的问题是少数字段的小数位数超过6个。

总有一种强力方法可以测试每一行的小数位数,并且只使用你可以使用的小数位。有谁知道解决问题的更好方法?

感谢。

3 个答案:

答案 0 :(得分:0)

在隐式或显式转换期间,T-SQL会自动舍入任何额外的小数位数......您不需要进行任何测试。

DECLARE
    @VarcharField VARCHAR(50),
    @NumericField NUMERIC(28,6)

SET @VarcharField = '123456789.123456789'
SET @NumericField = @VarcharField

PRINT @NumericField

-- OUTPUT
-- 123456789.123457

答案 1 :(得分:0)

如果输入值的小数位数超过6,这是可以的,除非我误解了你。

你可以这样做:

select convert(decimal(28,6),'17897986056.1235246346')

答案 2 :(得分:0)

您想要排除这些行吗?如果没有,我会简单地使用ROUND函数(http://msdn.microsoft.com/en-us/library/ms175003.aspx)。这使您能够截断其他数字或根据需要进行舍入。