SQL中基于现有列通过乘法填充新增列的技术问询
正确操作步骤
你用INSERT语句是错的——INSERT是用来新增行的,不是修改现有行的列值,这就是操作失败的核心原因。正确的做法是用UPDATE语句来更新已有的行:
第一步:修正列创建语句(可选但建议)
你之前的列创建语句用单引号包裹列名,这在多数数据库里不规范(单引号一般用来包裹字符串值)。不同数据库的规范写法如下,记得把table_name换成你的实际表名:
-- MySQL 写法(用反引号包裹列名) ALTER TABLE table_name ADD `PricingEUR` NUMERIC(10, 2); -- 建议指定小数位,避免丢失精度 -- SQL Server 写法(用方括号包裹列名) ALTER TABLE table_name ADD [PricingEUR] NUMERIC(10, 2); -- 通用写法(列名无特殊字符时可直接使用) ALTER TABLE table_name ADD PricingEUR NUMERIC(10, 2);
这里给NUMERIC加上(10,2)是为了保留乘法后的两位小数,和你期望的结果格式一致。
第二步:填充现有行的列值
用UPDATE语句批量更新每一行的PricingEUR值:
UPDATE table_name SET PricingEUR = PricingUSD * 1.08;
执行这条语句后,现有行的PricingEUR就会被正确填充为PricingUSD乘以1.08的结果。
进阶:让列自动同步计算结果(可选)
如果希望以后PricingUSD的值更新时,PricingEUR能自动同步计算结果,可以创建计算列,不同数据库的语法略有不同:
- MySQL:
ALTER TABLE table_name ADD PricingEUR NUMERIC(10,2) GENERATED ALWAYS AS (PricingUSD * 1.08) STORED;
- SQL Server:
ALTER TABLE table_name ADD PricingEUR AS (PricingUSD * 1.08) PERSISTED;
- PostgreSQL:
ALTER TABLE table_name ADD COLUMN PricingEUR NUMERIC(10,2) GENERATED ALWAYS AS (PricingUSD * 1.08) STORED;
这种方式下,PricingEUR的值会自动随PricingUSD的变化更新,无需手动执行UPDATE。
内容的提问来源于stack exchange,提问作者IzzyM
相关产品推荐
相关产品推荐

