2016-05-03 10 views
0

ユーザーの同じ表に2つの列があります:name-displayedshort-nameです。MySQL:同じテーブル内の列の値に基づいて列を変更します

name-displayedには、「John Doe」などのユーザーのフルネームが入力されます。 short-nameには、短い値があります。 "ジョン・ドゥー"(本質的に大文字とハイフン)。

name-displayedのデータに基づいて、short-nameのデータをどのように修正しますか?私はUPDATEに基づいて自己結合を使用することができると確信していますが、私はどのように列全体のデータの変更を実装するのか分からない。

ご協力いただければ幸いです。

答えて

0

これにはLowerReplace関数を使用する必要があります。 参照:Lowerおよび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 ; 
+0

ありがとうございました。構文に従ってトリガーを作成すると、完全に機能しました。再度、感謝します! – 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

Hey @Walter_Ritzel、テーブル名に '-'文字があるので、バッククォート' ''を使う必要があります – Nosh

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

私はあなたがそれを説明する場合 ケアでない場合は、名前と表示された短い名前と同じ、 を設定する必要があります理解しています。 あなたは何を修正したいですか?

関連する問題