Mysql: обрезать все поля в базе данных
UPDATE mytable SET mycolumn= LTRIM(RTRIM(mycolumn));
отлично работает при обрезке столбцов, удаляя пробелы трейлера, но как я могу настроить его, чтобы обрезать все столбцы без необходимости писать каждое имя столбца в таблице? потому что у меня есть огромная база данных.
Ответы
Ответ 1
Несколько лет поздно, но может помочь другим:
Этот код обрезает все поля таблицы "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
вы разворачиваете запрос для каждого столбца:
UPDATE mytable
SET mycolumn = LTRIM(RTRIM(mycolumn)),
mycolumn2 = LTRIM(RTRIM(mycolumn2)),
...;
Ответ 3
UPDATE mytable SET
mycolumn = LTRIM(RTRIM(mycolumn)),
mycolumn2 = LTRIM(RTRIM(mycolumn2))
и т.д. и т.д.
Ответ 4
Поскольку вопрос запрашивает всю базу данных, вот script, который генерирует требуемый 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 Спасибо.
Ответ 5
Если не так много столбцов, вы можете просто
непосредственно
UPDATE
each by your_column_name через функцию TRIM()
:
UPDATE mytable SET
mycolumn1 = TRIM(mycolumn1),
mycolumn2 = TRIM(mycolumn2),
mycolumn3 = TRIM(mycolumn3),
mycolumn4 = TRIM(mycolumn4)
В противном случае, ответ на вопрос ZweiStein выше для отдельной таблицы ,
или ответ Ижера Аазми для всей базы данных, похоже, идет.
Ответ Hiram на другой SO Post включает проверку только полей TRIM VARCHAR: отличная функция!
Или, если вы используете T-SQL или другие, которые не поддерживают TRIM
, используйте трюк LTRIM(RTRIM(...))
,
предложенный Джим Рубенштейн и Дени де Бернарди выше.
Ответ 6
Вы можете использовать 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;
? >