Mysql:修剪数据库中的所有字段

Zal*_*oza 23 mysql trim

UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn));
Run Code Online (Sandbox Code Playgroud)

修剪列删除拖车空间工作正常,但我如何调整它来修剪所有列而不必写表中的每个列名?因为我有一个庞大的数据库.

Den*_*rdy 9

您扩展每列的查询:

UPDATE mytable
SET mycolumn = LTRIM(RTRIM(mycolumn)),
    mycolumn2 = LTRIM(RTRIM(mycolumn2)),
    ...;
Run Code Online (Sandbox Code Playgroud)

  • OP 说他不想写每个列名。 (2认同)

Izh*_*zmi 7

由于问题要求整个数据库,这里是生成所需 SQL 的脚本。我跳过自动执行,随心所欲地执行它。

-- Set your database name here
SET @my_database:='YOUR_DB_NAME';

SET SESSION group_concat_max_len = 1000000;

SELECT 
    CONCAT('UPDATE `', @my_database, '`.`', TABLE_NAME, 
            '` SET ', GROUP_CONCAT(
                CONCAT('`', COLUMN_NAME, '` = TRIM(`', COLUMN_NAME, '`)')
                ORDER BY ORDINAL_POSITION ASC),
            ';') AS `query`
FROM
    INFORMATION_SCHEMA.COLUMNS
WHERE
    TABLE_SCHEMA = @my_database
GROUP BY TABLE_NAME
ORDER BY TABLE_NAME ASC;
Run Code Online (Sandbox Code Playgroud)

@ZweiStein 谢谢。


小智 6

几年后,但可能会帮助其他人:此代码修剪表"your_table"的所有字段.可以扩展为以相同的方式在整个数据库上工作....

SET SESSION group_concat_max_len = 1000000;
select concat('update your_table set ',group_concat(concat('`',COLUMN_NAME, '` = trim(`',COLUMN_NAME,'`)')),';')
   FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'your_table'
    into @trimcmd;

prepare s1 from @trimcmd;
execute s1;
DEALLOCATE PREPARE s1;
Run Code Online (Sandbox Code Playgroud)