我将一个文件导入到临时表中,并导入了所有varchar类型的数字字段。那些数字字段最终必须转到一个定义为数字的字段(28,6),我将无法更改目标。
我遇到的问题是少数字段的小数位数超过6个。
总有一种强力方法可以测试每一行的小数位数,并且只使用你可以使用的小数位。有谁知道解决问题的更好方法?
感谢。
答案 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)。这使您能够截断其他数字或根据需要进行舍入。