我将一个文件导入到临时表中,并且导入使所有 varchar 类型的数字字段。这些数字字段最终必须转到定义为数字(28,6)的字段,我将无法更改目标。
我遇到的问题是一些字段的小数位数超过 6 位。
总是有蛮力的方法来测试每一行它有多少小数位并且只取你可以使用的东西。有谁知道解决问题的更好方法?
谢谢。
我将一个文件导入到临时表中,并且导入使所有 varchar 类型的数字字段。这些数字字段最终必须转到定义为数字(28,6)的字段,我将无法更改目标。
我遇到的问题是一些字段的小数位数超过 6 位。
总是有蛮力的方法来测试每一行它有多少小数位并且只取你可以使用的东西。有谁知道解决问题的更好方法?
谢谢。
T-SQL 将在隐式或显式转换期间自动舍入任何额外的小数位......您不需要进行任何测试。
DECLARE
@VarcharField VARCHAR(50),
@NumericField NUMERIC(28,6)
SET @VarcharField = '123456789.123456789'
SET @NumericField = @VarcharField
PRINT @NumericField
-- OUTPUT
-- 123456789.123457
如果输入值的小数点后超过 6 位也没关系,除非我误解了你。
你可以这样做:
select convert(decimal(28,6),'17897986056.1235246346')
您要排除这些行吗?如果没有,我会简单地使用 ROUND 函数 (http://msdn.microsoft.com/en-us/library/ms175003.aspx)。如果您愿意,这使您能够截断附加数字或四舍五入。