2015-07-02 6 views
0

Все имена столбцов в моей таблице имеют в них символ подчеркивания. Я хочу удалить это подчеркивание из каждого столбца и заменить пробелом. Я знаю, что могу сделать это один столбец в то время с чем-то вроде этого (может быть), но это может просто сделать это для записей, а не имена столбцов:Удалить подчеркивание из всех имен столбцов в mysql

UPDATE photos SET caption = REPLACE(caption,'_',' ') 

Однако, у меня есть 70 столбцов и обновление одного в то время потребовалось бы некоторое время. Любые ярлыки для этого?

+0

Вы имеете в виду, что ваше содержимое колонки должно содержать символы подчеркивания? Ваш запрос будет только обновлять содержимое, он вообще не будет влиять на имена столбцов ... –

ответ

0

Вариант 1: Получить MySQL, чтобы создать автоматически генерируемый SELECT заявление, содержащее все имена столбцов (или как-то работает для вас), а затем использовать регулярные выражения, чтобы создать длинную команду SQL.

Например:

column1 
column_2 
... 

Regular Expression FIND: \([A-Za-z0-9]*\)_([A-Za-z0-9]*\) (предполагается, что только один подчеркивание, отрегулируйте при необходимости)

Regular Expression REPLACE: ALTER TABLE xyz CHANGE [\1_\2] [\1 \2] <type>;

Или Вариант 2

вы можете перебирать имена столбцов с помощью somet повесят как это от: mysql, iterate through column names

DECLARE col_names CURSOR FOR 
    SELECT column_name 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = 'tbl_name' 
    ORDER BY ordinal_position; 


select FOUND_ROWS() into num_rows; 

SET i = 1; 
the_loop: LOOP 

    IF i > num_rows THEN 
     CLOSE col_names; 
     LEAVE the_loop; 
    END IF; 


    FETCH col_names 
    INTO col_name;  

    //do whatever else you need to do with the col name 

    SET i = i + 1; 
END LOOP the_loop; 
+0

В Варианте 2, где у вас есть «// делать что угодно ...», я не могу заставить что-то работать здесь , Если это что-то вроде: «SELECT REPLACE ('_', '');' – jonmrich

+0

@jonmrich. Я согласен с вами, что ответ, представленный по ссылке, напуган. Я просто не знаю достаточно о MySQL, чтобы ответить на ваш вопрос - похоже, этот подход предполагает выполнение динамического SQL https://dev.mysql.com/worklog/task/?id = 2793 –

+0

@ jonmrich Будучи уже на вашем месте, я знаю, что настал час, и у кого-то не хватает времени, чтобы прокормить такие вещи, поэтому в конце дня все, что имеет значение, - это задача, которую нужно выполнить. Я действительно чувствую, что построение SQL программно было бы быстрее, чем чистый подход SQL, и хотел бы бросить это вам: http://regexr.com/ К сожалению, обучение регулярным выражениям может быть одним из бременем - я имею нашли их неоценимыми в повседневных задачах, даже не связанных с программированием. –

0

дамп список ваших имен таблиц/столбцов в файл. Используйте это как основу сценария .sql, который выполняет ваши инструкции 70 ALTER TABLE и выполняет их.

Так что, если вы создаете файл вроде этого:

users this_column 
sales that_column 
products other_column 

, а затем программу Perl, как это:

while (<>) { 
    chomp; 
    my ($table,$oldname) = split//; 

    my $newname = $oldname; 
    $newname =~ s/_//g; 

    print "ALTER TABLE $table RENAME $oldname TO $newname;\n"; 
} 

и запустить его так:

perl rename.pl names.txt > rename.sql 

Вы» ll завершает работу с SQL-скриптом следующим образом:

ALTER TABLE users RENAME this_column TO thiscolumn; 
ALTER TABLE sales RENAME that_column TO thatcolumn; 
ALTER TABLE products RENAME other_column TO othercolumn; 

, который затем можно передать клиенту MySQL.

Это не делает это в SQL, но это гораздо меньше хлопот, чем возиться со словарем данных MySQL.

Примечание. Я не тестировал вывод, чтобы увидеть, работает ли работающий MySQL. Это просто иллюстрация.

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