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 art
z pictures
. 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).