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

ट्रेलर रिक्त स्थानों को हटाकर कॉलम ट्रिमिंग पर ठीक काम करता है में सभी क्षेत्रों ट्रिम, लेकिन मैं यह कैसे समायोजित तालिका में प्रत्येक स्तंभ नाम लिखने के लिए बिना सभी स्तंभों ट्रिम करने के लिए कर सकते हैं ?? क्योंकि मेरे पास एक विशाल डेटाबेस है।Mysql: डेटाबेस

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

उत्तर

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

5

आप प्रत्येक स्तंभ के लिए क्वेरी का विस्तार करें।

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

और इतने पर, और इसके आगे:

+0

क्यों नहीं बस ट्रिम कर दीजिए()? – GracefulCode

+1

अच्छा सवाल @GracefulCode ... वापस की तलाश में, यह वास्तव में प्रश्न की वर्तमान स्थिति को संबोधित नहीं करता, मैं लग रहा है के बाद जवाब प्रस्तुत किया गया था जैसे कि यह संपादित किया गया था। –

+0

टी-एसक्यूएल में 'TRIM()' नहीं है। उस परिदृश्य में, 'एलटीआरआईएम (आरटीआरआईएम (mycolumn))' चाल काम करता है। – SherylHohman

3

के बाद से सवाल पूरे डेटाबेस के लिए पूछता है, यहाँ स्क्रिप्ट है कि आवश्यक एसक्यूएल उत्पन्न करता है विस्तारित किया जा सकता है। मैं ऑटो निष्पादन को छोड़ देता हूं, इसे पसंद करते हुए इसे निष्पादित करता हूं।

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

आप इसके लिए पीएचपी उपयोग कर सकते हैं (आदेश एसक्यूएल त्रुटियों से बचने के लिए, बेहतर प्रिंट प्रश्नों फिर उन्हें बाद में निष्पादित):

$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

अगर वहाँ भी कई नहीं स्तंभ हैं, तो आप कर सकते थे बस
सीधे your_column_name द्वारा UPDATE प्रत्येक, TRIM() समारोह के माध्यम से:

UPDATE mytable SET 
mycolumn1 = TRIM(mycolumn1), 
mycolumn2 = TRIM(mycolumn2), 
mycolumn3 = TRIM(mycolumn3), 
mycolumn4 = TRIM(mycolumn4) 
,210

अन्यथा, एक भी तालिका, एक पूरे डेटाबेस के लिए
या Izhar Aazmi's जवाब के लिए ऊपर ZweiStein's जवाब जाने का रास्ता लगता है। एक और एसओ पोस्ट करने के लिए

Hiram's जवाब भी शामिल को एक चेक केवलVARCHAR क्षेत्रों ट्रिम: उत्कृष्ट सुविधा!

या, T-SQL, या दूसरों का उपयोग कर यदि जो TRIM का समर्थन नहीं करते, LTRIM(RTRIM(...)) चाल,
Jim Rubenstein और Denis de Bernardy ऊपर द्वारा सुझाए गए का उपयोग करें।