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

funciona bien sobre el recorte de columnas eliminación de espacios de remolque, pero ¿cómo puedo ajustarlo para recortar todas las columnas sin tener que escribir el nombre de cada columna en la tabla ?? porque yo tengo una gran base de datos.MySQL: Recorte todos los campos en la base de datos

Respuesta

6

Algunos años de retraso, pero podría ayudar a los demás: Este código recorta todos los campos de un la mesa "your_table". podría ampliarse para trabajar en toda la base de datos de la misma manera ....

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

¿Desea compartir la expansión de una base de datos completa? – AlasdairC

5

a ampliar la consulta para cada columna:

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

y así sucesivamente, y así sucesivamente.

+0

¿Por qué no simplemente TRIM()? – GracefulCode

+1

@GracefulCode buena pregunta ... mirando hacia atrás, esto en realidad no aborda el estado actual de la pregunta, parece que fue editada después de que se envió la respuesta. –

+0

T-SQL no tiene 'TRIM()'. En ese escenario, el truco 'LTRIM (RTRIM (mycolumn))' funciona. – SherylHohman

3

Dado que la pregunta se refiere a toda la base de datos, aquí está el script que genera el SQL necesario. Me salteo la ejecución automática, ejecútala como quieras.

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

-1

Puede usar PHP para él (con el fin de evitar errores de SQL, mejores consultas de impresión y luego ejecutarlas más adelante):?

$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

Si no hay demasiadas columnas, usted podría simplemente
directamente UPDATE cada por your_column_name, a través de la función de TRIM():

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

De lo contrario, ZweiStein's respuesta anterior para una sola tabla ,
o Izhar Aazmi's respuesta para toda una base de datosparece el camino a seguir.

Hiram's respuesta a otra SO mensaje incluye un cheque para única TRIMVARCHAR campos: excelente característica!

O, si el uso de T-SQL, u otros que no son compatibles con TRIM, utilice el truco LTRIM(RTRIM(...)),
sugerido por Jim Rubenstein y Denis de Bernardy anteriormente.

Cuestiones relacionadas