Заменяем нужную часть строки в БД, выполнив update со строковой функцией replace.

Тип статьи:
Авторская

И так, мне была поставлена задача обновить все email адреса в БД, в связи со сменной домена. При этом мне предоставили в excel-e перечень пользователей+их email адреса.

Адрес состоит из двух частей, разделённых символом «@». Левая часть указывает имя почтового ящика, часто оно совпадает с логином пользователя. Правая часть адреса указывает доменное имя того сервера, на котором расположен почтовый ящик.

Левая часть практически у всех остается прежней, правая заменяется с olddomen.local на newdomen.local.

В голову пришло несколько идей:

1. Выгрузить из БД все email адреса и в любом редакторе сделать замену, после чего обновить все записи через файл импорт. Как то много телодвижений…

2. По «гуглить» и попить чайку:) Решение долго не искал. В поисковике набирал приблизительно следующие запросы(кому интересно, можете и другие примеры посмотреть и почитать документацию): «Использование переменных в update SQL», «Частичная замена части строки в SQL» и т.д. Но сделал я все же это через строковую функцию, хоть и хотел попробовать, что то с переменной.

Синтаксис:

REPLACE ( string_expression , string_pattern , string_replacement )

Аргументы:

string_expression

Строковое выражение, в котором выполняется поиск. string_expression может иметь либо символьный, либо двоичный тип данных.

string_шаблон

Подстрока для поиска. string_pattern может иметь либо символьный, либо двоичный тип данных. string_pattern не может быть пустой строкой ('') и не может превышать максимальное число байтов, которое может уместиться на странице.

замена string_
Решение:

UPDATE table
SET field = replace(field, 'olddomen.local', 'newdomen.local')
WHERE field LIKE 'olddomen.local%';

Ну вот и все. По сути дела данный способ универсален и не имеет привязки к наименованию СУБД.

Будут вопросы, задавайте! С большой радостью отвечу:)

11.05.2016
480

Комментарии

Нет комментариев. Ваш будет первым!
Загрузка...