MySQL имеет ряд доступных строковых функций, позволяющих вам работать со строковыми значениями данных множеством способов. В этом сообщении блога я исследую и узнаю о функции REPLACE, используемой для замены определенных разделов строки…

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

Используемые ОС и БД:

  • Xubuntu Linux 16.04.5 LTS (Xenial Xerus)
  • MySQL 5.7.24

Синтаксис функции REPLACE (из документации) следующий:

REPLACE(str,from_str,to_str)

Параметры означают:

  • str: строка искомая, возвращаемая после завершения выполнения функции.
  • from_str: эта строка будет заменена в строке ‘searched’.
  • to_str: эта строка выполняет замену в строке ‘searched’.

Ниже приведен простой пример использования значения, которое нам, возможно, потребуется преобразовать в допустимый тип данных date для дальнейшего хранения и обработки:

mysql> SELECT REPLACE(‘12–09–99’, ‘-’, ‘,’);
 + — — — — — — — — — — — — — — — -+
 | REPLACE(‘12–09–99’, ‘-’, ‘,’)  |
 + — — — — — — — — — — — — — — — -+
 | 12,09,99                       |
 + — — — — — — — — — — — — — — — -+
 1 row in set (0.02 sec)

Видимая в возвращаемом результате запроса строка «12–09–99» (которая должна быть значением даты в формате «месяц-день-год»), каждое вхождение дефиса (-) была заменена на запятая (,).

Я применю это к практическому варианту использования. Во-первых, присвойте возвращаемое значение пользовательской переменной сеанса (см. сообщение в блоге Транзакции MySQL и определяемые пользователем переменные сеанса, в котором я писал об этих удобных переменных):

mysql> SET @some_date = REPLACE(‘12–09–99’, ‘-’, ‘,’);
 Query OK, 0 rows affected (0.00 sec)

Затем используйте эту переменную сеанса в вызове функции STR_TO_DATE, выполняя преобразование в допустимый тип данных MySQL date:

mysql> SELECT STR_TO_DATE(@some_date, ‘%m, %d, %Y’);
 + — — — — — — — — — — — — — — — — — — — -+
 | STR_TO_DATE(@some_date, ‘%m, %d, %Y’)  |
 + — — — — — — — — — — — — — — — — — — — -+
 | 1999–12–09                             |
 + — — — — — — — — — — — — — — — — — — — -+
 1 row in set (0.01 sec)

Хотите узнать больше о функции STR_TO_DATE? Прочитайте мою запись в блоге Структурирование значений даты-кандидата с помощью функции STR_TO_DATE в MySQL — с примерами.

REPLACE выполняет поиск с учетом регистра по строковому параметру searched.

См. следующий произвольный пример:

mysql> SELECT REPLACE(‘Josh’,’j’,’G’);
 + — — — — — — — — — — — — -+
 | REPLACE(‘Josh’,’j’,’G’)  |
 + — — — — — — — — — — — — -+
 | Josh                     |
 + — — — — — — — — — — — — -+
 1 row in set (0.00 sec)

Обратите внимание, что в этом вызове функции не было заменено ни одной части строки.
Почему?

Чтобы понять, обратите внимание на разницу в регистре для буквы «J» с одним и тем же запросом:

mysql> SELECT REPLACE(‘Josh’,’J’,’G’);
 + — — — — — — — — — — — — -+
 | REPLACE(‘Josh’,’J’,’G’)  |
 + — — — — — — — — — — — — -+
 | Gosh                     |
 + — — — — — — — — — — — — -+
 1 row in set (0.00 sec)

На этом примере видно, что регистр имеет значение для параметра from_str.

В следующем примере мы узнаем, как REPLACE может помочь нам с простой опечаткой в ​​наших данных.
Предположим, у меня есть таблица site_promotion, содержащая рекламные текстовые данные для веб-сайта:

mysql> CREATE TABLE site_promotion(
    -> promo_id INTEGER PRIMARY KEY,
    -> promo_body TEXT,
    -> promo_date DATETIME DEFAULT CURRENT_TIMESTAMP());
 Query OK, 0 rows affected (0.39 sec)

Ниже представлены сохраненные данные:

mysql> SELECT * FROM site_promotion\G
*************************** 1. row ***************************
  promo_id: 17
promo_body: This is our amazing promotional add for this week only! Get half off the cover price for the next 7 days only! Do not miss this deal!!!
promo_date: 2018-11-15 07:14:26
*************************** 2. row ***************************
  promo_id: 91
promo_body: What?! Prefer to do all your shopping online? Hey who doesn't! No worries. Visit us at wwc.salesgalore.com for all the latest deals you cannot refuse! Again, that is wwc.salesgalore.com
promo_date: 2018-11-15 07:18:43
*************************** 3. row ***************************
  promo_id: 111
promo_body: Happy 4th Sale! We have offers to good to be true!!
promo_date: 2018-11-15 07:15:21
3 rows in set (0.00 sec)

Вы заметите, что в столбце promo_body для строки, содержащей promo_id из 91, есть опечатки для вымышленного адреса веб-сайта, wwc.salesgalore.com. Вместо этого следует читать ‘www’.
Легко исправить с помощью функции REPLACE:

mysql> UPDATE site_promotion
    -> SET promo_body = REPLACE(promo_body,’wwc’,’www’)
    -> WHERE promo_id = 91;
 Query OK, 1 row affected (0.07 sec)
 Rows matched: 1 Changed: 1 Warnings: 0

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

Давайте вернемся к обновленным данным для этой строки:

mysql> SELECT *
    -> FROM site_promotion
    -> WHERE promo_id = 91\G
 *************************** 1. row ***************************
 promo_id: 91
 promo_body: What?! Prefer to do all your shopping online? Hey who doesn’t! No worries. Visit us at www.salesgalore.com for all the latest deals you cannot refuse! Again, that is www.salesgalore.com
 promo_date: 2018–11–15 07:18:43
 1 row in set (0.00 sec)

Оба экземпляра «wwc» были заменены на «www».

Для получения дополнительной информации посетите функцию ЗАМЕНИТЬ, чтобы определить, как ее можно использовать для ваших конкретных случаев использования, по ссылке на официальную документацию ниже.

Нравится то, что вы прочитали? Видите что-нибудь неправильное? Пожалуйста, прокомментируйте ниже и спасибо за чтение!!!

Изучите официальное Онлайн-руководство по MySQL 5.7 для получения дополнительной информации.

Призыв к действию!

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

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

Я упоминал, как сильно я люблю чашку кофе?!?!

Чтобы получать уведомления по электронной почте (никогда не спам) из этого блога (Проза цифровой совы) о последних сообщениях в блоге по мере их публикации, подпишитесь (по собственному желанию), нажав кнопку Нажмите, чтобы подписаться! боковая панель на главной странице! (Не стесняйтесь в любое время просмотреть Страницу политики конфиденциальности Digital Owl’s Prose по любым вопросам, которые могут у вас возникнуть: обновления по электронной почте, подписка, отказ, контактные формы и т. д.)

Обязательно посетите страницу Лучшее из для коллекции моих лучших постов в блоге.

Джош Отвелл страстно желает учиться и расти как разработчик SQL и блогер. Другие любимые занятия заставят его уткнуться носом в хорошую книгу, статью или командную строку Linux. Среди них он разделяет любовь к настольным ролевым играм, чтению фантастических романов и проведению времени с женой и двумя дочерьми.

Отказ от ответственности: примеры, представленные в этом посте, являются гипотетическими идеями о том, как достичь подобных результатов. Это не самое лучшее решение(я). Большинство, если не все, приведенные примеры выполняются в рабочей среде персональной разработки/обучения и не должны рассматриваться как качественные или готовые к использованию. Ваши конкретные цели и потребности могут отличаться. Используйте те методы, которые лучше всего подходят для ваших нужд и целей. Мнения мои собственные.

Первоначально опубликовано на сайте joshuaotwell.com 12 декабря 2018 г.