MySQL:根据同一个表中的列值修改列

时间:2016-05-03 10:17:51

标签: mysql sql multiple-columns

我的用户在同一个表格中有两列:name-displayedshort-name

name-displayed填充了用户的全名,例如“John Doe”。在short-name中,存在短值,例如“john-doe”(基本上是去大写和连字符)。

如何根据short-name中的数据修改name-displayed中的数据?我确信我可以使用基于UPDATE的自我加入,但我不确定如何在列中实现数据更改。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

您需要使用LowerReplace函数。 请参阅文档中的LowerReplace

Update <table_name> 
    set `short-name` = REPLACE(LOWER(`name-displayed`), ' ','-') 
    where <conditions>;

如果您希望自动完成此操作,则需要像Walter_Ritzel建议的那样编写触发器。

delimiter //
CREATE TRIGGER auto_set_short_name BEFORE INSERT ON account
FOR EACH ROW
BEGIN
    SET NEW.`short-name` = REPLACE(LOWER(`name-displayed`), ' ','-');

END;//
delimiter ;

答案 1 :(得分:0)

您可以使用触发器:Triggers

插入/更新之前的触发器可以轻松解决这个问题。

delimiter //
CREATE TRIGGER ins_sum BEFORE INSERT OR UPDATE ON table
 FOR EACH ROW 
begin 
     SET New.`short-name` =  REPLACE(LOWER(NEW.`name-displayed`), ' ','-') ;
end;
//

使用反引号或此字符:```,以确保-不被解释为减号。

答案 2 :(得分:-1)

update table a join table b on a.id = b.id
set a.short-name = b.name-displayed;

据我所知,你需要将名字显示设为与短名称相同, 如果不是这样的话 小心解释。 你要修改什么?