首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MySQL:如何重构此代码以消除添加和删除中间列

MySQL:如何重构此代码以消除添加和删除中间列
EN

Stack Overflow用户
提问于 2017-09-30 16:27:27
回答 3查看 41关注 0票数 2

如何更新以下代码,使其不添加、然后删除列?

此代码从具有"3码“(命名为"LengthFloat")等值的列中计算数值列(名为”长度“)的值。

代码语言:javascript
运行
AI代码解释
复制
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;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-07 07:08:39

代码应该保持原样。

另一个建议的答案描述了另一种方法(使用View),效率非常低,因此必须拒绝它(参见注释)。

票数 0
EN

Stack Overflow用户

发布于 2017-09-30 17:21:56

代码语言:javascript
运行
AI代码解释
复制
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;

请参阅http://sqlfiddle.com/#!9/ed7ca1/3

票数 0
EN

Stack Overflow用户

发布于 2017-09-30 18:25:30

当然,这是有可能的摆弄长度的表情。但是在SQL中它是痛苦的。而是..。

我会退一步决定使用哪一个单位。我可能会选择公制。例如,我可能会选择“米”的所有长度,不是公里,不是安格斯特罗姆,不是脚,不是弗隆,不是谷仓,不是光年。(好吧,如果应用程序涉及天文学,我可能会使用光年。)然后我会在应用程序中进行转换,而不是数据库。除非在极端情况下,否则我不会添加或删除列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46508206

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文