我表中的所有列名都有下划线。我想从每列中删除此下划线并替换为空格。我知道我可以用这样的东西(也许)一次做这一列,但这可能只是为条目而不是列名做:
UPDATE photos SET caption = REPLACE(caption,'_',' ')
但是,我有70列,一次更新一列需要一段时间。这有什么捷径吗?
答案 0 :(得分:0)
选项1 :让MySQL创建一个自动生成的SELECT
语句,其中包含所有列名(或者其他适合您的名称),然后使用正则表达式创建一个长SQL命令。
例如:
column1
column_2
...
正则表达式查找:\([A-Za-z0-9]*\)_([A-Za-z0-9]*\)
(仅假设一个下划线,根据需要调整)
正则表达式替换:ALTER TABLE xyz CHANGE [\1_\2] [\1 \2] <type>;
或者,选项2
您可以使用以下内容迭代列名: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;
答案 1 :(得分:0)
将表/列名称列表转储到文件中。使用它作为执行70 ALTER TABLE
语句并执行该语句的.sql脚本的基础。
所以如果你创建一个这样的文件:
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
你最终会得到一个像这样的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是否有效。它只是说明。