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_expressionto oryginalny ciąg. W rzeczywistości może to być stała, zmienna lub kolumna danych znakowych lub binarnych.startokreśla pozycję początkową (tj. miejsce, w którym zostanie wstawiony nowy ciąg).lengthto ile znaków ma zostać usuniętych z oryginalnego ciągu.replaceWith_expressionto wstawiany ciąg.replaceWith_expressionmoż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 .