2010-08-16 4 views
1

Я не гуру баз данных, делаю большинство вещей через PHP, как и манипуляции с данными, даже если это внутренняя задача. Однако PHP не очень полезен в этом случае. У меня есть таблица с около 0,4 миллиона записей в ней, и она имеет 16 столбцов, все остальное работает нормально, но я заполнил эту таблицу из текстового файла, и этот текстовый файл имел большинство значений в каждом столбце в двойных кавычках, таких как "United States of America" "London" и т. д.Как заменить элемент в каждом столбце таблицы базы данных?

Я хочу удалить эти двойные кавычки, где бы я ни находил их, используя один запрос или SQL-скрипт. Я пробовал PHP и его метод str_replace, но, видимо, записи слишком велики, чтобы продолжать применять эту функцию для каждой записи, а затем запускать 2 запроса для каждого значения. Может ли быть какое-нибудь SQL-решение?

База данных MySQL, двигатель можно переключить с MyISAM на InnoDB. Я видел это решение здесь: SQL: search for a string in every varchar column in a database, но не уверен, что он будет работать для меня. Благодарю.

ответ

2

(непроверенные)

update mytable set mycol = case 
    when mycol like '"%"' then trim(both '"' from mycol) 
    else mycol end; 

На самом деле, вы, вероятно, не нужно даже выражение случай:

update mytable set mycol = trim(both '"' from mycol)' 

Повторите запрос для других столбцов или продлить этот, чтобы покрыть все ваши колонны.

+0

Есть ли какая-либо конкретная причина, по которой вы проверяете '%' 'в блоке 'case when', а не в разделе' where' запроса 'update'? Поскольку ни один из них не будет использовать индексы, он, вероятно, будет не быстрее, но мне кажется более понятным просто «WHERE mycol LIKE» «%» '' – Wolph

+0

TRIM() удаляет только ведущий и конечный« remstr ». Я считаю, что он хотел удалить их всех. – Anpher

+0

@WoLpH: вы, вероятно, правы, это было бы лучше. –

1

REPLACE() должен работать нормально.

UPDATE `table` SET `column` = REPLACE(`column`, '"', '') 
+0

Это заменит все' ''. Хотя это, вероятно, будет желательным, я не сказал бы, что это гарантия. – Wolph

Смежные вопросы