W SQL Server możesz użyć T-SQL STUFF()
funkcja, aby wstawić ciąg do innego ciągu. Dzięki temu możesz na przykład wstawić słowo w określonej pozycji. Pozwala także zamienić słowo w określonej pozycji.
Oto oficjalna składnia:
STUFF ( character_expression , start , length , replaceWith_expression )
character_expression
to oryginalny ciąg. W rzeczywistości może to być stała, zmienna lub kolumna danych znakowych lub binarnych.start
określa pozycję początkową (tj. miejsce, w którym zostanie wstawiony nowy ciąg).length
to ile znaków ma zostać usuniętych z oryginalnego ciągu.replaceWith_expression
to wstawiany ciąg.replaceWith_expression
może być stałą, zmienną lub kolumną danych znakowych lub binarnych.
Zamień słowo
Oto przykład, w którym zamieniam słowo w ciągu.
SELECT STUFF('Cats and dogs', 6, 3, 'like');
Wynik:
Cats like dogs
W tym przypadku określam, że słowo like
należy wstawić na pozycji 6, a 3 znaki powinny zostać usunięte z oryginalnego ciągu (to usuwa słowo and
). Tak więc słowo and
zostanie usunięty, a słowo like
jest włożony.
Wstaw słowo
Oto przykład wstawiania słowa bez usuwania czegokolwiek z oryginalnego ciągu:
SELECT STUFF('Cats and dogs', 10, 0, 'big ');
Wynik:
Cats and big dogs
Nic nie jest usuwane z oryginalnego ciągu, ponieważ określiłem 0
jako trzeci argument.
Wartości poza zakresem
Jeśli pozycja początkowa znajduje się poza długością oryginalnego ciągu, zwracana jest wartość NULL.
Przykład:
SELECT STUFF('Cats and dogs', 20, 4, 'rabbits');
Wynik:
NULL
W tym przypadku oryginalny ciąg nie ma 20 znaków, więc wynikiem jest NULL
.
To samo dzieje się, jeśli podasz 0
lub liczba ujemna:
SELECT STUFF('Cats and dogs', -1, 4, 'rabbits');
Wynik:
NULL
Wyniki tych przykładów są sprzeczne z INSERT()
w MySQL funkcja, która w tym scenariuszu zwróciłaby oryginalny ciąg. INSERT()
w MySQL robi w zasadzie to samo, co funkcja STUFF()
w T-SQL (z wyjątkiem takich przypadków).
Wstawianie wartości NULL
Jeśli wstawisz wartość NULL, Twój wynik po prostu usunie podaną liczbę znaków z podanej pozycji. Innymi słowy, nic nie jest wstawiane, ale znaki są nadal usuwane zgodnie z opisem.
Przykład:
SELECT STUFF('Cats and dogs', 6, 3, NULL);
Wynik:
Cats dogs
To kolejny obszar, w którym MySQL różni się od T-SQL. Wykonanie tego przykładu za pomocą funkcji INSERT()
w MySQL funkcja zwróciłaby wynik NULL
.