2011-05-20 62 views
19
UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn)); 

工作在修剪去除拖車空間列細各個領域,但我該如何調整它修剪所有列,而無需編寫在表中每列名?因爲我有一個龐大的數據庫。MySQL的:修剪數據庫

回答

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; 
+0

小心分享整個數據庫的擴展? – AlasdairC 2016-01-07 13:16:30

5

展開每一列的查詢:

UPDATE mytable 
SET mycolumn = LTRIM(RTRIM(mycolumn)), 
    mycolumn2 = LTRIM(RTRIM(mycolumn2)), 
    ...; 
4
UPDATE mytable SET 
mycolumn = LTRIM(RTRIM(mycolumn)), 
mycolumn2 = LTRIM(RTRIM(mycolumn2)) 

等等,等等。

+0

爲什麼不只是TRIM()? – GracefulCode 2016-04-27 16:23:58

+1

@GracefulCode很好的問題...回頭看,這實際上並沒有解決問題的當前狀態,我看起來好像在答案提交後編輯它。 – 2016-04-28 15:29:37

+0

T-SQL沒有'TRIM()'。在這種情況下,'LTRIM(RTRIM(mycolumn))'技巧就可以工作。 – SherylHohman 2017-11-20 04:34:20

3

由於問題問的整個數據庫,這裏是產生所需的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謝謝。

-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; 

>

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柱包括檢查只TRIMVARCHAR領域:出色的功能!

或者,如果使用T-SQL,或其他不支持TRIM,使用LTRIM(RTRIM(...))伎倆,
通過Jim RubensteinDenis de Bernardy上述建議。