MySQL: 根据相同 table 中的列值修改列

MySQL: Modify column based on column values in same table

我的用户在同一 table 中有两列:name-displayedshort-name

name-displayed 填充用户的全名,例如 "John Doe"。 short-name中有短值,例如"john-doe"(本质上是去大写和连字符)。

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

如有任何帮助,我们将不胜感激!

为此您需要使用 LowerReplace 函数。 请参阅:文档中的 Lower and Replace

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 ;

您可以使用触发器:Triggers

Insert/Update之前的触发器可以轻松解决这个问题。

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;
//

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

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

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