Mysql: обрезать все поля в базе данных - PullRequest
23 голосов
/ 20 мая 2011
UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn));

отлично работает при обрезке столбцов, удаляя пробелы в трейлере, но как я могу настроить его, чтобы обрезать все столбцы без необходимости записывать имя каждого столбца в таблицу? потому что у меня есть огромная база данных.

Ответы [ 6 ]

9 голосов
/ 20 мая 2011

Вы расширяете запрос для каждого столбца:

UPDATE mytable
SET mycolumn = LTRIM(RTRIM(mycolumn)),
    mycolumn2 = LTRIM(RTRIM(mycolumn2)),
    ...;
6 голосов
/ 02 февраля 2015

Некоторые годы опаздывают, но могут помочь другим: Этот код обрезает все поля таблицы "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;
4 голосов
/ 01 июня 2016

Поскольку вопрос касается всей базы данных, вот скрипт, который генерирует необходимый 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 голосов
/ 20 мая 2011
UPDATE mytable SET 
mycolumn = LTRIM(RTRIM(mycolumn)), 
mycolumn2 = LTRIM(RTRIM(mycolumn2)) 

и т. Д. И т. П.

0 голосов
/ 20 ноября 2017

Если столбцов не слишком много, вы можете просто
напрямую UPDATE каждый с вашим именем_колонки, через функцию TRIM():

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

В противном случае, ZweiStein's Ответ выше для одной таблицы ,
или Ответ Ижара Аазми для всей базы данных кажется правильным.

Хирам ответ на другой SO Сообщение включает проверку только TRIM VARCHAR полей: отличная функция!

Или, если используется T-SQL, или другиекоторые не поддерживают TRIM, используйте трюк LTRIM(RTRIM(...)),
, предложенный Джимом Рубинштейном и Дени де Бернарди выше.

0 голосов
/ 19 июля 2017

Вы можете использовать для него 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;

?>

...