我上传了一个CSV,它自动将所有列转换为varchar。我需要将值 22.30 转换为 0.223。
alter table badv2018
alter column [BB Percent] decimal(4, 3)
但是我得到错误:
Msg 8115,级别 16,状态 8,第 146
行 将数字转换为数据类型数字的算术溢出错误。
我需要将值 22.30 转换为 0.223。
您需要通过 100.0 设计它,然后DECIMAL(4, 3)
就可以了
DECLARE @Value DECIMAL(4, 3) = 22.3 / 100.0;
SELECT @Value
返回:
0.223
因此,您需要先UPDATE
表,然后ALTER
[BB Percent]
列。
简单的方法是:
- 添加新列
DECIMAL(4, 3)
。 - 将数据移入其中。
- 删除旧列。
- 重命名新的。
--First step
ALTER TABLE badv2018
ADD New DECIMAL(4, 3);
--Second step
UPDATE badv2018
SET New = [BB Percent] / 100.0;
--Third step
ALTER TABLE badv2018
DROP COLUMN [BB Percent];
--The last step
EXEC sp_rename 'badv2018.New', 'BB Percent', 'COLUMN';
享受!
现场演示
更新:
您还可以添加一个计算列并保留[BB Percent]
列,这种方式将确保您可以获得真实数据和计算数据。
ALTER TABLE badv2018
ADD New AS CAST([BB Percent] / 100.0 AS DECIMAL(4, 3));
使其具有更广泛的值。 例如:
alter table badv2018
alter column [BB Percent] decimal(10, 3)
(4, 3)
只能表示 0.000 到 9.999 之间的值。 你可能真的想要(6, 3)
,所以 10 是矫枉过正的。
然后,您可以添加具有所需结果的另一列:
alter table badv2018
add column bb_ratio as ([BB Percent] / 100);