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

时间:2011-05-20 12:56:11

标签: mysql trim

UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn));

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

7 个答案:

答案 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 RubensteinDenis 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;

相关问题