2016-05-03 73 views
0

我在我的用戶列表中有兩列:name-displayedshort-nameMySQL:根據同一個表中的列值修改列

name-displayed填充了用戶的全名,例如「John Doe」。在short-name中,存在短值,例如「john-doe」(基本上沒有大寫字母和連字符)。

如何根據name-displayed中的數據修改short-name中的數據?我確信我可以使用基於UPDATE的自連接,但我不確定如何在列中實現數據更改。

任何幫助將非常感激!

回答

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 ; 
+0

謝謝Nosh - 根據你的語法創建一個觸發器完美工作。再次感謝! – jusher

+0

歡迎;你可能需要爲'BEFORE UPDATE'做這件事。 – Nosh

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

使用反引號或該字符:```,以確保-不被解釋爲減號。

+0

嘿@Walter_Ritzel,因爲表名中有'-'字符,所以你需要使用反引號''' – Nosh

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

我明白你需要設置名稱顯示相同的短名稱, 如果情況並非如此 護理解釋。 你想修改什麼?

相關問題