Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

5 najważniejszych faktów dotyczących znajdowania i zastępowania tekstów SQL w SQL Server za pomocą funkcji REPLACE

Dzisiejsze edytory kodu i edytory tekstu są wyposażone w funkcję wyszukiwania i zastępowania. Jest to pomocne, gdy trzeba zmienić słowo lub grupę słów. Nie chcemy wyrzucać naszej pisemnej pracy z powodu drobnego problemu lub zmiany.

To samo dotyczy naszych danych. Użytkownicy będą nas przeklinać, jeśli powiemy im, aby zmienili to, co należy zmienić. Dlatego dostępna jest również funkcja wyszukiwania i zamiany, która umożliwia zastępowanie tekstów zapisanych w naszych bazach danych. Tutaj pojawia się polecenie REPLACE w SQL.

Składnia REPLACE w SQL jest następująca:

ZAMIEŃ ( , , )

Pamiętaj, że wszystkie parametry są wymagane. może być literałem ciągu lub wynikiem wyrażenia. W tabelach bazy danych zwykle przekazujemy kolumnę ciągu, w której chcemy zmienić wartość. Tymczasem jest ciągiem w obrębie chcesz szukać. Na koniec przekazujesz który zastąpi . Proste, czyż nie?

Ale mogą być pewne zastrzeżenia. W ten sposób możesz dowiedzieć się, jak uniknąć zastępowania niewłaściwych słów lub jak uniknąć wstawiania zduplikowanych rekordów w SQL Server. A może nie zastępowanie właściwych słów. A na końcu zepsuć swoje dane.

Czy jesteś nowy w SQL REPLACE? Oto DARMOWA ściągawka dla Ciebie. Wpisz poniżej swój adres e-mail, a wyślemy go prosto do Twojej skrzynki odbiorczej.

Brzmi nieźle? Zagłębmy się.

[sendpulse-form id=”12251″]

1. SQL REPLACE zastępuje tekst dla WSZYSTKICH wystąpień

Zgadza się. Zamiata cały tekst ciągiem, który chcesz przeszukać. Pozwól, że ci to pokażę i wyjaśnię problem. Spójrz na poniższy przykład:

SELECT REPLACE('know the unknown','know','seek'); 
-- OUTPUT: 'seek the unseekn. Surprise!

wiedzieć ciąg występuje dwukrotnie, w słowach wiem i wiedzieć n. Jeśli nie będziesz ostrożny, do Twoich danych wkradną się błędy ortograficzne. Zamiast tego możesz dodać spację, aby wyszukiwać tylko pełne słowa. Oto zmodyfikowany kod:

SELECT REPLACE('know the unknown','know ','seek ');   
-- OUTPUT: 'seek the unknown'.

Dużo lepiej? Mogą istnieć inne scenariusze, ale rozumiesz.

2. SQL REPLACE może usuwać teksty

Czy próbowałeś zastąpić słowo z niczym w edytorze tekstu? A może chcesz usunąć duplikaty w SQL? Dzieje się tak również w SQL REPLACE. Oto przykład:

USE AdventureWorks
GO

SELECT
 EmailAddress
,REPLACE(EmailAddress,'-','') AS NewEmailAddress
FROM person.EmailAddress;

Pierwsza kolumna zawiera oryginalną nazwę domeny adresu e-mail. Drugi usuwa myślnik z oryginalnej nazwy domeny. Zobacz zrzut ekranu poniżej:

Jeśli musisz usunąć jeden lub więcej znaków z oryginalnego ciągu, użyj pustego ciągu SQL jako zamiennika. W ten sposób możesz również usunąć zduplikowane rekordy w SQL.

3. Sortowanie wpływa na wyniki SQL REPLACE

Podczas instalowania programu SQL Server używane jest sortowanie domyślne. To z kolei będzie używane przez Twoje bazy danych i kolumny tabel. Rysunek 2 pokazuje ten, którego używam:

Na moim laptopie używam SQL_Latin1_CP1_CI_AS . Jest to zestawienie bez uwzględniania wielkości liter. (Zobacz także CI w nazwie sortowania dla c ase ja niewrażliwy). Stąd słowa Pies , pies , PIES i dOg będą traktowane tak samo.

Wypróbujmy to w akcji:

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');

Wynik:

Funkcja REPLACE znalazła słowo Kot w Kocie s w pierwszym zdaniu i słowie kot w ostatnim zdaniu. Nie ma znaczenia, czy litery są duże czy małe.

Jeśli jednak w ramach REPLACE wymusimy zmianę sortowania na taką, w której rozróżniana jest wielkość liter, co się stanie? Oto kod używający COLLATE w 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'); 

A oto wynik:

Widzisz teraz, jak sortowanie wpływa na wynik. Kot i kot są teraz traktowane inaczej. Akapit staje się mylący. Tak więc lekcja polega na ostrożnym używaniu sortowania.

4. Możesz zagnieździć SQL REPLACE

Możesz zastąpić słowa, które już zastąpiłeś, zagnieżdżając funkcję REPLACE. Oto przykład:

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';

W powyższym przykładzie użyto REPLACE w REPLACE. To znaczy zmienić UTWÓRZ PROCEDURĘ do ZMIANY PROCEDURY następnie BusinessEntityID do BusinessEntityNo .

Zapytanie wpłynie na procedury składowane, które używały BusinessEntityID kolumna. Jest to przydatne, gdy chcesz zmienić nazwę kolumny w tabeli i zastąpić kod bazy danych, którego dotyczy problem. Wpływa to również na parametry procedury składowanej, ale można je zastąpić, aby zachować spójność nazewnictwa.

Pamiętaj, że przed wykonaniem instrukcji ALTER musisz sprawdzić zmiany, które zostaną zastosowane. Nie chcesz zepsuć rzeczy, prawda?

Tymczasem zagnieżdżenie REPLACE może również rozwiązać problem, który mieliśmy wcześniej dotyczący kotów i psy . Oto poprawka:

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');

Sprawdź nowy wynik:

Zauważ również, że problem wielkich liter na rysunku 3 również został rozwiązany.

5. Używaj z UPDATE do przechowywania zastąpionych tekstów

Do tej pory używaliśmy tylko SQL REPLACE z zapytaniem SELECT. To pozwoli nam tylko zobaczyć wynik REPLACE. Aby zapisać jego dane wyjściowe, musisz również wydać UPDATE. Oto przykład:

USE AdventureWorks
GO

UPDATE Person.EmailAddress
 SET EmailAddress= REPLACE(EmailAddress,'-','');

Oto kolejny przykład użycia MySQL z udziałem blog_posts tabela w WordPressie. Zobacz, jak zamienić prywatny adres URL na publiczny:

-- 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';

Zestaw wyników dla pierwszej instrukcji powyżej można zobaczyć poniżej za pomocą dbForge Studio dla MySQL:

Wniosek

Jak na razie dobrze. Widziałeś, co REPLACE w SQL może zrobić w akcji. Może podpowiedzieć, kiedy trzeba zmienić adresy e-mail i adresy URL. jeśli zmienisz nazwę kolumny w tabeli używanej w procedurze składowanej, widoku lub synonimie.

Zróbmy podsumowanie:

  • SQL REPLACE może zastąpić tekst dla WSZYSTKICH wystąpień.
  • Może również usunąć część tekstu.
  • Ustawienia sortowania mogą wpływać na wynik REPLACE.
  • Możesz zagnieździć użycie SQL REPLACE.
  • Na koniec użyj UPDATE do przechowywania zastąpionych tekstów.

Jeśli podoba Ci się ten post, udostępnij go w swoich ulubionych mediach społecznościowych. Daj nam również znać, co myślisz w sekcji komentarzy poniżej.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Radzenie sobie z wartościami NULL w SQL Server

  2. Wstawianie wielu wierszy w jednym zapytaniu SQL?

  3. 5 najlepszych narzędzi do modelowania danych dla SQL Server

  4. Planowe utrzymanie bazy danych IS 24/7 w MS SQL Server

  5. Jak NTILE() działa w SQL Server