SQL для поиска и замены в MySQL - PullRequest
4 голосов
/ 07 января 2009

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

В любом случае, возвращаясь к моему вопросу, для решения этой проблемы я использую запрос этой формы:

ОБНОВЛЕНИЕ table_name SET field_name = заменить (поле_формы,»SEARCH_TEXT», 'REPLACE_TEXT»);

И поэтому, если в таблице, над которой я работаю, есть несколько столбцов, я должен вызвать этот запрос для каждого из столбцов. А также, поскольку есть не только одна пара вещей для запуска поиска и замены, я также должен вызвать запрос для каждой из этих пар.

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

Что мне было интересно, так это то, есть ли способ объединить несколько запросов на поиск и замену в одном запросе, например, скажем, поискать этот набор вещей и, если он найден, заменить соответствующей парой из этого другого набора вещи.

Или, если бы был способ сделать запрос в форме, которую я показал выше, выполнить как-то рекурсивно для каждого столбца таблицы, независимо от их имени или номера.

Заранее благодарю за поддержку, Titel

Ответы [ 4 ]

6 голосов
/ 07 января 2009

Давайте попробуем разобраться с каждым из них в отдельности:

Если набор замен одинаков для каждого столбца в каждой таблице, для которой вам нужно сделать это (или есть только несколько шаблонов), рассмотрите возможность создания пользовательской функции, которая принимает varchar и возвращает varchar, который просто называет replace(replace(@input,'search1','replace1'),'search2','replace2') вложенным соответствующим образом.

Чтобы обновить несколько столбцов одновременно, вы должны сделать UPDATE table_name SET field_name1 = replace(field_name1,...), field_name2 = replace(field_name2,...) или что-то подобное.

Что касается выполнения чего-то подобного для каждого столбца в каждой таблице, я думаю, что было бы проще написать некоторый код, который выбирает список столбцов и генерирует запросы для выполнения из этого.

1 голос
/ 07 января 2009

Если у вас есть несколько замен различного текста в одном поле, я рекомендую вам создать таблицу с текущими значениями и тем, на что вы хотите их заменить. (Может быть какая-то временная таблица, если это разовая сделка; если нет, сделайте ее постоянной таблицей.) Затем присоединитесь к этой таблице и выполните обновление.

Что-то вроде:

update t1
set field1 = t2.newvalue
from table1 t1
join mycrossreferncetable t2 on t1.field1 = t2.oldvalue

Извините, я не заметил, что это MySQL, код, который я бы использовал в SQL Server, мой синтаксис SQL может отличаться, но метод будет похожим.

1 голос
/ 07 января 2009

Я не знаю способа автоматического запуска поиска и замены в каждом столбце, однако проблема нескольких пар поиска и замены терминов в одном запросе UPDATE легко решается с помощью вложенных вызовов replace() * * 1003

UPDATE table_name SET field_name =
    replace(
        replace(
            replace(
                field_name,
                'foo',
                'bar'
            ),
            'see',
            'what',
        ),
        'I',
        'mean?'
    )
0 голосов
/ 09 апреля 2009

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

Я бы просто вставил эту строку, но мне показалось, что я слишком туп, чтобы понять, как использовать скидку с цены, поэтому код здесь:

http://www.anovasolutions.com/content/mysql-search-and-replace-stored-procedure

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...