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

Jak zamienić wszystkie wystąpienia ciągu na inny ciąg w SQL Server – REPLACE()

W SQL Server możesz użyć T-SQL REPLACE() funkcja zastępująca wszystkie wystąpienia danego ciągu innym ciągiem. Na przykład możesz zastąpić wszystkie wystąpienia określonego słowa innym słowem.

Składnia

Oto oficjalna składnia:

REPLACE ( string_expression , string_pattern , string_replacement )

Gdzie string_expression to ciąg, który zawiera jedno lub więcej wystąpień ciągu (lub podciągu) do zastąpienia, string_pattern jest ciągiem do zastąpienia, a string_replacement jest ciągiem, który go zastępuje.

Przykład

Oto przykład do zademonstrowania:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');

Wynik:

My apartment has no art hanging on the walls and no pot plants hanging from the ceiling.

W tym przykładzie po prostu zastępujemy słowo some ze słowem no .

Wiele słów

Oczywiście nie ma reguły, która mówi, że możesz zastąpić słowo tylko jednym słowem (i vice versa). W końcu po prostu zastępujemy ciąg innym ciągiem, niezależnie od tego, czy ten ciąg zawiera słowa, litery, cyfry, spacje itp.

Mogliśmy więc łatwo zastąpić to jedno słowo dwoma lub więcej słowami:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');

Wynik:

My apartment has lots of art hanging on the walls and lots of pot plants hanging from the ceiling.

Więc tutaj zastępujemy słowo some ze słowami lots of .

Usuń słowo

Możesz także usunąć słowo (lub podciąg) z ciągu. Aby to zrobić, po prostu zastąp go pustym ciągiem:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');

Wynik:

My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

Jeśli jednak przyjrzysz się uważnie, zobaczysz, że nowy ciąg zawiera podwójne spacje, w których usunęliśmy słowo. Dzieje się tak, ponieważ słowo, które usunęliśmy, miało spacje po lewej i prawej stronie. Usunęliśmy słowo, ale nie usunęliśmy żadnych spacji, dlatego pozostały dwie spacje.

Możemy to naprawić, dodając jedną ze spacji w słowie do usunięcia:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');

Wynik:

My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

Uważaj!

Bardzo łatwo jest popełnić błędy podczas korzystania z REPLACE() funkcja (lub dowolna znajdź i zamień funkcjonalność w tym zakresie).

Na przykład ten błąd:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');

Wynik:

My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

Jak widać, zastąpiliśmy słowo artpictures . Jednak w tym przypadku słowo apartment miało to również wpływ – zmieniło się w apicturesment , co nie było zamierzone. Dzieje się tak, ponieważ słowo apartment zawiera podciąg art .

Zazwyczaj można się przed tym zabezpieczyć, dodając spacje wokół wyszukiwanego słowa, a także słowa zastępczego:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', ' art ', ' pictures ');

Wynik:

My apartment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

To oczywiście zakłada, że ​​zastępujesz całe słowo. Będziesz musiał ocenić każdą sytuację w miarę jej pojawiania się.

Układanie/rozróżnianie wielkości liter

Możesz użyć opcjonalnego COLLATE klauzula, aby zastosować jawne sortowanie do danych wejściowych. Może to być przydatne do wykonywania operacji wyszukiwania/zamieniania z uwzględnieniem wielkości liter i tym podobnych.

Oto przykład porównujący dwa zestawienia.

Nie uwzględnia wielkości liter

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');

Wynik:

Dogs, Dogs, and more Dogs!

W tym przykładzie sortowanie, które określamy, obejmuje _CI w jego nazwie, co oznacza „niewrażliwy na wielkość liter”. Powoduje to zastąpienie wszystkich wystąpień, mimo że pierwsze wystąpienie ma wielkie litery.

Zauważysz, że ta metoda nie wpływa na wielkość liter zastępowanego ciągu.

Rozróżnianie wielkości liter

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');

Wynik:

Cats, Dogs, and more Dogs!

W tym przykładzie sortowanie, które określamy, obejmuje _CS w swojej nazwie, co oznacza „Case Sensitive”. Powoduje to pierwsze wystąpienie Cat być pominiętym, ponieważ jego pierwszym znakiem jest wielka litera (która nie pasuje do wielkości liter w drugim argumencie).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyślij e-mail z wyzwalacza w SQL Server (T-SQL)

  2. Jak podzielić ciąg rozdzielany w programie SQL Server bez tworzenia funkcji?

  3. Sprawdź nieudane wiadomości e-mail w programie SQL Server (T-SQL)

  4. Funkcja a procedura składowana w SQL Server

  5. Usuwanie zduplikowanych wierszy (na podstawie wartości z wielu kolumn) z tabeli SQL