如何更新以下代码,使其不添加、然后删除列?
此代码从具有"3码“(命名为"LengthFloat")等值的列中计算数值列(名为”长度“)的值。
alter table sometable add Value float;
alter table sometable add Units varchar(15);
Update sometable
set Value = SUBSTRING_INDEX(SUBSTRING_INDEX(Length, ' ', 1), ' ', -1),
Units = SUBSTRING_INDEX(SUBSTRING_INDEX(Length, ' ', 2), ' ', -1);
update sometable
set LengthFloat = case Units
when 'yards' then Value*3
when 'yard' then Value*3
when 'feet' then Value
when 'foot' then Value
end;
alter table sometable drop column Value;
alter table sometable drop column Units;
发布于 2017-10-07 07:08:39
代码应该保持原样。
另一个建议的答案描述了另一种方法(使用View),效率非常低,因此必须拒绝它(参见注释)。
发布于 2017-09-30 17:21:56
drop view if exists sometable_with_value_units;
create view sometable_with_value_units as
select id,
SUBSTRING_INDEX(SUBSTRING_INDEX(Length, ' ', 1), ' ', -1) as value,
SUBSTRING_INDEX(SUBSTRING_INDEX(Length, ' ', 2), ' ', -1) as units
from sometable;
select id,
case units
when 'yards' then value * 3
when 'yard' then value * 3
when 'feet' then value
when 'foot' then value
end as feet
from sometable_with_value_units;
发布于 2017-09-30 18:25:30
当然,这是有可能的摆弄长度的表情。但是在SQL中它是痛苦的。而是..。
我会退一步决定使用哪一个单位。我可能会选择公制。例如,我可能会选择“米”的所有长度,不是公里,不是安格斯特罗姆,不是脚,不是弗隆,不是谷仓,不是光年。(好吧,如果应用程序涉及天文学,我可能会使用光年。)然后我会在应用程序中进行转换,而不是数据库。除非在极端情况下,否则我不会添加或删除列。
https://stackoverflow.com/questions/46508206
复制相似问题