Поиск и замена слов в строках на SQL
Часто в таблицах базы данных требуется произвести поиск и замену слова или подстроки. Для таких действий в SQL есть специальная функция «Replace». Рассмотрим на примерах как она работает в MySQL.
Внимание! При массовой обработке данных в базах данных не забывайте предварительно делать резервную копию.
Допустим, у компании поменялось название и требуется его заменить в таблице «table_name» на новое. Для этого выполняем запрос на обновление поля «field_text» с использованием нашей функции.
UPDATE `table_name` SET `field_text` = REPLACE(`field_text`,'АО Газмяс','ООО Газмяс') WHERE `field_text` LIKE '%АО Газмяс%';
В качестве параметров передаём содержимое текущего поля, подстроки для поиска и замены. Секцию «WHERE» можно опустить, но препочтительно чтобы операция «UPDATE» применялась только к тем записям, где предварительно обнаружилась искомая подстрока.
Удаление подстроки из таблицы
Для удаления произвольной подстроки используем ту же функцию, но последний параметр указываем пустым.
UPDATE `table_name` SET `field_text` = REPLACE(`field_text`,'АО Газмяс','');
Добавление подстрок к полю
Существую случаи когда в начало или конец поля требуется что-то добавить. Например, новое предложение. В этих случая в SQL используют функцию объединения строк — «Concat».
UPDATE `table_name` SET `field_text` = CONCAT(`field_text`,' THE END!');
Эту же задачу можно решить и спомощью «Replace». При этом появляется возможность добавлять подстроку в начало поля.
UPDATE `table_name` SET `field_text` = REPLACE(`field_text`,`field_text`,'START! ' + `field_text` + ' THE END!');
В примере к каждому полю таблицы в начало добавляется подстрока «START!», а в конец — « THE END!».
Приведённые SQL запросы можно выполнять как на PHP, так и через скрипты администрирования, вроде «phpMyAdmin».
Одинарные кавычки в SQL запросе на Delphi или RAD Studio
Вопрос немного другой, но, в целом, вполне подходит для данной статьи.
у меня есть база, в которую я планирую заносить отчеты по бэкапам.
каждый сервер отправляет данные в данную таблицу.
Задача:
Если ID существует, то обновить данные, если id нет, то добавить данные.
Как-то так, я думаю, надо делать, но прошу скорректировать…
use Regions_Report_Backup; go if OBJECT_ID ('dbo.Table_1', 'id') is null insert into dbo.Table_1 (id, server, db_time, db_size, db_check, data_time, data_size, data_check, pst_time, pst_size, pst_check, system_time, system_size, system_check) value (103, 'S10303', '2022.09.28', '4340133137', 'true', '2022.09.30', '7791564650', 'true', '2022.09.29', '5337385942', 'true', '2022.09.24', '27660377957','true') else update dbo.Table_1 set db_time = '2022.09.28', db_size = '4340133137', db_check = 'true', data_time = '2022.09.30', data_size = '7791564650', data_check = 'true', pst_time = '2022.09.29', pst_size = '5337385942', pst_check = 'true', system_time = '2022.09.24', system_size = '27660377957', system_check = 'true' goА так решение задачи зависит от СУБД
Например, в mysql для этих целей есть конструкция INSERT… ON DUPLICATE KEY UPDATE