UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn));
Run Code Online (Sandbox Code Playgroud)
修剪列删除拖车空间工作正常,但我如何调整它来修剪所有列而不必写表中的每个列名?因为我有一个庞大的数据库.
您扩展每列的查询:
UPDATE mytable
SET mycolumn = LTRIM(RTRIM(mycolumn)),
mycolumn2 = LTRIM(RTRIM(mycolumn2)),
...;
Run Code Online (Sandbox Code Playgroud)
由于问题要求整个数据库,这里是生成所需 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)