如何为表中的每一列调用MySQL函数



我需要为表中的所有列调用mySQL函数。

我知道如何为特定的专栏做这件事像这样:UPDATE `table_name` set `column_name` = function_name(`column_name`)

但我不知道如何同时为所有列执行此操作。提前谢谢。

小澄清:我不想手动提及所有列,因为我可能有200列的表。

但我不知道如何同时对所有列执行此操作。

你就是不能-在update语法中没有这样的快捷方式。

您可以使用单个update语句来完成此操作,但需要枚举每一列,如:

update table_name set
column_name1 = function_name(column_name1),
column_name2 = function_name(column_name2),
column_name3 = function_name(column_name3)

另一种选择是使用动态SQL从目录表information_schema.columns中以编程方式生成正确的查询字符串,然后执行它。对于看起来像一次性任务的任务来说,这似乎非常复杂。。。但这里有一个示例代码:

-- input variables
set @table_schema  = 'myschema';
set @table_name    = 'mytable';
set @function_name = 'myfunction';
-- in case "GROUP_CONCAT()" returns more than 1024 characters
set session group_concat_max_len = 100000;
-- build the "set" clause of the query string
select
@sql := group_concat(
'`', column_name, '` = ', @table_schema, '.', @function_name, '(`', column_name, '`)'
separator ', '
)
from information_schema.columns
where table_schema = @table_schema and table_name = @table_name;
-- entire query string
set @sql := concat('update ', @table_schema, '.', @table_name, ' set ', @sql);
-- debug
select @sql mysql;
-- execute for real
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;

最新更新