В SQL Server можете да използвате T-SQL STUFF()
функция за вмъкване на низ в друг низ. Това ви позволява да правите неща като вмъкване на дума на конкретна позиция. Освен това ви позволява да замените дума на конкретна позиция.
Ето официалния синтаксис:
STUFF ( character_expression , start , length , replaceWith_expression )
character_expression
е оригиналният низ. Това всъщност може да бъде константа, променлива или колона от символни или двоични данни.start
определя началната позиция (т.е. къде ще бъде вмъкнат новият низ).length
е колко знака трябва да бъдат изтрити от оригиналния низ.replaceWith_expression
е низът, който се вмъква.replaceWith_expression
може да бъде константа, променлива или колона от символни или двоични данни.
Заменете дума
Ето пример, при който заменям дума в низ.
SELECT STUFF('Cats and dogs', 6, 3, 'like');
Резултат:
Cats like dogs
В този случай уточнявам, че думата like
трябва да се вмъкне на позиция 6 и че 3 знака трябва да бъдат изтрити от оригиналния низ (това изтрива думата and
). Така че думата and
се изтрива и думата like
е вмъкнат.
Вмъкнете дума
Ето пример за вмъкване на дума, без да се изтрива нищо от оригиналния низ:
SELECT STUFF('Cats and dogs', 10, 0, 'big ');
Резултат:
Cats and big dogs
Нищо не се изтрива от оригиналния низ, защото посочих 0
като трети аргумент.
Стойности извън обхвата
Ако началната позиция е извън дължината на оригиналния низ, се връща стойност NULL.
Пример:
SELECT STUFF('Cats and dogs', 20, 4, 'rabbits');
Резултат:
NULL
В този случай оригиналният низ не е дълъг 20 знака, така че резултатът е NULL
.
Същото се случва, ако предоставите 0
или отрицателно число:
SELECT STUFF('Cats and dogs', -1, 4, 'rabbits');
Резултат:
NULL
Резултатът от тези примери е в контраст с INSERT()
на MySQL функция, която би върнала оригиналния низ в този сценарий. INSERT()
на MySQL прави основно същото нещо като STUFF()
на T-SQL (с изключение на случаи като тези).
Вмъкване на NULL стойности
Ако въведете стойност NULL, вашият резултат просто ще премахне посочения брой знаци от посочената позиция. С други думи, нищо не се вмъква, но знаците все още се премахват, както е посочено.
Пример:
SELECT STUFF('Cats and dogs', 6, 3, NULL);
Резултат:
Cats dogs
Това е друга област, в която MySQL се различава от T-SQL. Правете този пример с INSERT()
на MySQL функцията би върнала резултат от NULL
.