Днешните редактори на код и текстообработващи програми идват с функция за търсене и замяна. Полезно е, когато трябва да промените дума или група от думи. Не искаме да изхвърлим писмената си работа за незначителен проблем или промяна.
Същото важи и за нашите данни. Потребителите ще ни проклинат, ако им кажем да редактират това, което трябва да бъде преименувано. Ето защо функцията за търсене и замяна е налична и за замяна на текстове, написани в нашите бази данни. Тук идва командата REPLACE в SQL.
Синтаксисът REPLACE в SQL е както следва:
ЗАМЕНЕТЕ (<оригинален низ> , <низ за търсене> , <заместващ низ> )
Имайте предвид, че всички параметри са задължителни. <оригиналният низ> може да бъде низов литерал или низ резултат от израз. В таблиците на базата данни обикновено предаваме низ колона, където искаме стойността да се промени. Междувременно
Но може да има някои предупреждения. По този начин можете да разберете как да избегнете подмяната на грешните думи или как да избегнете вмъкването на дублиращи се записи в SQL Server. Или може би не заменя правилните думи. След това накрая объркате данните си.
Нов ли сте в SQL REPLACE? Ето БЕЗПЛАТНА измама за вас. Просто въведете имейл адреса си по-долу и ние ще го изпратим направо във входящата ви кутия.
Звучи яко? Да се задълбочим.
[sendpulse-form id=”12251″]
1. SQL REPLACE Заменя текста за ВСИЧКИ събития
Това е вярно. Той почиства целия ви текст с низа, който искате да търсите. Позволете ми да ви го покажа и да обясня проблема. Разгледайте примера по-долу:
SELECT REPLACE('know the unknown','know','seek');
-- OUTPUT: 'seek the unseekn. Surprise!
Знаят низът съществува два пъти, в думите знам и незна н. Ако не внимавате, правописни грешки ще се промъкнат във вашите данни. Вместо това можете да добавите място за търсене само на цели думи. Ето модифицирания код:
SELECT REPLACE('know the unknown','know ','seek ');
-- OUTPUT: 'seek the unknown'.
Много по-добре? Може да има и други сценарии, но разбирате смисъла.
2. SQL REPLACE може да премахва текстове
Опитвали ли сте да замените дума с нищо в текстов редактор? Или може би искате да премахнете дубликати в SQL? Това се случва и в SQL REPLACE. Ето един пример:
USE AdventureWorks
GO
SELECT
EmailAddress
,REPLACE(EmailAddress,'-','') AS NewEmailAddress
FROM person.EmailAddress;
Първата колона съдържа оригиналното име на домейн на имейл адреса. Вторият премахва тирето от оригиналното име на домейн. Вижте екранната снимка по-долу:
Ако трябва да премахнете един или повече символа от оригиналния низ, използвайте празен SQL низ като заместител. Можете също така да изтриете дублиращи се записи в SQL по този начин.
3. Съпоставянето влияе върху резултатите от SQL REPLACE
Когато инсталирате SQL Server, се използва съпоставяне по подразбиране. От своя страна това ще се използва от вашите бази данни и колони на таблицата. Фигура 2 показва този, който използвам:
На моя лаптоп използвам SQL_Latin1_CP1_CI_AS . Това е съпоставяне, независимо от главните букви. (Вижте също CI в името на съпоставянето за c асеи нечувствителен). Оттук и думите Куче , куче , КУЧЕ , и dOg ще бъдат третирани по същия начин.
Нека го опитаме в действие:
DECLARE @string VARCHAR(200) = 'Cats are great pets
and so easy to take care of. They make good companions.
Having a cat around is good for children.';
SELECT REPLACE(@string,'cat','dog');
И резултатът е:
Функцията ЗАМЕНИ намери думата Котка вкат с в първото изречение и думатакотка в последното изречение. Няма значение дали буквите са главни или малки.
Обаче, ако принудим промяна в съпоставянето с чувствителна към главни букви в REPLACE, какво ще се случи? Ето кода, използващ COLLATE в REPLACE:
DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';
-- force a change to a case-sensitive collation. '_CS_' for case-sensitive
SELECT REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog');
И ето изхода:
Сега виждате как съпоставянето влияе на резултата. Котка и котка сега се третират по различен начин. Параграфът става объркващ. Така че урокът е да използвате съпоставянето с повишено внимание.
4. Можете да поставите SQL ЗАМЕНА
Можете да замените думите, които вече сте заменили, като вложите функцията REPLACE. Ето един пример:
USE AdventureWorks
GO
SELECT
definition
,REPLACE(REPLACE(definition,'CREATE PROCEDURE','ALTER PROCEDURE'),'BusinessEntityID','BusinessEntityNo')
FROM sys.sql_modules a
INNER JOIN sys.objects b ON a.object_id = b.object_id
WHERE a.definition LIKE '%BusinessEntityID%'
AND b.type = 'P';
Примерът по-горе използва REPLACE в REPLACE. Това е да промените СЪЗДАВАНЕ НА ПРОЦЕДУРА до ПРОМЕНЯ ПРОЦЕДУРА след това BusinessEntityID до BusinessEntityNo .
Заявката ще засегне съхранените процедури, които са използвали BusinessEntityID колона. Това е полезно, когато искате да преименувате колона в таблица и да замените засегнатия код на базата данни. Параметрите на съхранените процедури също са засегнати, но можете да изберете да ги замените, за да запазите последователността на именуването.
Имайте предвид, че преди да изпълните операторите ALTER, трябва да проверите промените, които ще бъдат приложени. Не искате да объркате нещата, нали?
Междувременно влагането на REPLACE може също да реши проблема, който имаме по-рано при котките и кучета . Ето решението:
DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';
SELECT REPLACE(REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog') COLLATE SQL_Latin1_General_CP1_CS_AS,'Cat','Dog');
Вижте новия резултат:
Забележете също, че проблемът с главни букви на фигура 3 също е отстранен.
5. Използвайте с АКТУАЛИЗИРАНЕ за съхраняване на подменени текстове
Досега използвахме само SQL REPLACE със заявка SELECT. Това ще ни позволи само да видим изхода на REPLACE. За да съхраните неговия изход, вие също трябва да издадете UPDATE. Ето един пример:
USE AdventureWorks
GO
UPDATE Person.EmailAddress
SET EmailAddress= REPLACE(EmailAddress,'-','');
Ето още един пример за използване на MySQL, включващ blog_posts таблица в WordPress. Вижте как можете да замените частен URL адрес с публичен:
-- View the possible results
SELECT
guid
,REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net') AS NewGUID
FROM blog_posts
WHERE post_date > '2020-10-01';
-- Update the blog_posts table by replacing localhost with a fictitious URL
UPDATE blog_posts
set guid = REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net')
WHERE post_date > '2020-10-01';
Резултатът за първото изявление по-горе може да се види по-долу с помощта на dbForge Studio за MySQL:
Заключение
Дотук добре. Видяхте какво REPLACE в SQL може да направи в действие. Може да даде идеи, когато трябва да промените имейл адреси и URL адреси. ако преименувате колона в таблица, използвана в съхранена процедура, изглед или синоним.
Нека направим обобщение:
- SQL REPLACE може да замени текста за ВСИЧКИ събития.
- Може да премахне и част от текста.
- Настройките за съпоставяне могат да повлияят на изхода на REPLACE.
- Можете да вложите използването на SQL REPLACE.
- Накрая използвайте UPDATE, за да съхранявате подменените текстове.
Ако ви харесва тази публикация, моля, споделете я в любимите си социални медии. Кажете ни какво мислите в секцията за коментари по-долу.