2016-05-03 4 views
0

У меня есть два столбца в одной таблице для моих пользователей: name-displayed и short-name.MySQL: Изменить столбец на основе значений столбцов в одной таблице

name-displayed заполнено полным именем пользователя, например «John Doe». В short-name имеется короткое значение, например. «john-doe» (по существу декапитализированный и дефисный).

Как бы поменять данные в short-name на основе данных в name-displayed? Я уверен, что могу использовать самообучение на основе UPDATE, но я не уверен, как реализовать изменение данных по столбцам.

Любая помощь была бы чрезвычайно оценена!

ответ

0

Для этого вам необходимо использовать функции Lower и Replace. См.: 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

Спасибо Nosh - создание триггера по вашему синтаксису отлично работало. Еще раз спасибо! – jusher

+0

Welcome; вам может понадобиться сделать это для «ПЕРЕД ОБНОВЛЕНИЕМ». – Nosh

0

Вы можете использовать триггеры: 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; 
// 

Используйте обратные кавычки или этот символ: `` `, чтобы убедиться, что - не интерпретируется как знак минус.

+0

Привет @Walter_Ritzel, поскольку в именах таблиц есть символы '-', вам нужно использовать обратные обраты' '' – Nosh

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

Я понимаю, что вам нужно установить такое же, как короткое имя имя-дисплей, , если это не уход случае объяснить. Что вы хотите изменить?

Смежные вопросы