UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn));
在修剪删除拖车空间的列时工作正常,但我如何调整它以修剪所有列而不必在表中写入每个列名?因为我有一个庞大的数据库。
答案 0 :(得分:9)
您展开每列的查询:
UPDATE mytable
SET mycolumn = LTRIM(RTRIM(mycolumn)),
mycolumn2 = LTRIM(RTRIM(mycolumn2)),
...;
答案 1 :(得分: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;
答案 2 :(得分:4)
UPDATE mytable SET
mycolumn = LTRIM(RTRIM(mycolumn)),
mycolumn2 = LTRIM(RTRIM(mycolumn2))
依旧等等。
答案 3 :(得分:4)
由于问题要求整个数据库,因此这里是生成所需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;
@ZweiStein谢谢。
答案 4 :(得分:0)
如果没有太多列,您可以只是
直
UPDATE
每个都由your_column_name,通过TRIM()
函数:
UPDATE mytable SET
mycolumn1 = TRIM(mycolumn1),
mycolumn2 = TRIM(mycolumn2),
mycolumn3 = TRIM(mycolumn3),
mycolumn4 = TRIM(mycolumn4)
否则,ZweiStein's会在上面回答单个表格,
或Izhar Aazmi's对整个数据库的回答似乎是要走的路。
Hiram's回复另一个SO帖子包括检查仅TRIM VARCHAR 字段:优秀功能!
或者,如果使用T-SQL或其他不支持TRIM
的人,请使用LTRIM(RTRIM(...))
技巧,
由上面的Jim Rubenstein和Denis de Bernardy建议。
答案 5 :(得分:0)
我实际上正在为遗留表寻找类似的东西,当我遇到这个问题时,该遗留表由外部来源不断更新。我意识到OP正在寻找纯SQL(MySQL)答案,但是如果您使用Rails,您可能会发现我提出的一些建议:
MyModel.update_all(MyModel.columns.map(&:name).map{|x| "#{x} = TRIM(#{x})"}.join(', '))
您还可以将其包装到模型中的类方法中
class MyModel < ActiveRecord::Base
def self.trim_all
update_all(columns.map(&:name).map{|x| "#{x} = TRIM(#{x})"}.join(', '))
end
end
然后这样称呼
MyModel.trim_all
答案 6 :(得分:-1)
你可以使用PHP(为了避免sql错误,更好的打印查询,然后再执行它们):
$dbHost = 'localhost';
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'database';
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
$db->set_charset("utf8");
$queries = '';
$query="SELECT * from table";
$result = $db->query($query);
$headers = $result->fetch_fields();
foreach($headers as $header) {
$col = $header->name;
$queries .= "UPDATE table SET `".$col."` = TRIM(`".$col."`) </br>";
}
echo $queries;
&GT;