This is the most amazing function of T-SQL which is mostly used to delete a specified length of characters within a given string and replace it with another set of characters. Unlike the CONCAT function, which was introduced in SQL Server 2012, the STUFF function has been in prior versions of SQL Server too and hence we can use it in them too.
Syntax:-
STUFF (Character
Expression, Start, Length, Replace With Expression)
Arguments: This function uses the following parameters.
Character
Expression: Is an
expression of character data. Character Expression can be a constant, variable,
or column of either character or binary data.
Start: Is an
integer value that specifies the location to start deletion and insertion. If
start or length is negative, a null string is returned. If start is longer
than the first Character Expression, a null string is returned. Start can be of type bigint.
Length: Is an integer that specifies the number of characters to delete. If
length is longer than the first Character Expression,
deletion occurs up to the last character in the last Character Expression.
Length can be of type bigint.
Replace With Expression: Is an expression of character data. Replace With Expression can be a
constant, variable, or column of either character or binary data. This
expression will replace length characters of Character
Expression beginning at start.
|
Important points to remember: There are some basic points always keep in mind as given below-
- If the start position or the length is negative, or if the starting position is larger than length of the first string, a null string is returned.
- If the start position is 0, a null value is returned.
- If the length to delete is longer than the first string, it is deleted to the first character in the first string.
Example 1: Generate a Comma-Separated List
Stuff function is very useful if we want to add comma-separated list. If we want to capture all comments against any particular topic then stuff function comes into the picture such as given below-
--- declare table variable to store the comments
DECLARE @UserInputs TABLE
(
PollId Int, PollSubject Varchar(250), UserComments Varchar(250)
)
----- Insert Values into table variable
INSERT INTO
@UserInputs ( PollId,
PollSubject, UserComments)
VALUES
(1, 'Most favourite super hero?',
'Superman' ),
(1, 'Most favourite super hero?' ,'Batman' ),
(1, 'Most favourite super hero?' ,'Ironman'),
(1, 'Most favourite super hero?' ,'Wolverine'),
(2, 'Most favourite movie?',
'Titanic' ),
(2, 'Most favourite movie?' ,'The Note Book' ),
(3, 'Most favourite Game?' ,'Cricket'),
(3, 'Most favourite Game?' ,'Football')
SELECT PollId, PollSubject,
UserComments FROM @UserInputs
SELECT DISTINCT
PollId, PollSubject,
UserInput=STUFF((SELECT ',' + UserComments
FROM
@UserInputs
Where
PollId=UI.PollId
ORDER BY PollSubject
FOR XML PATH('')), 1, 1, '')
from @UserInputs UI
ORDER BY
UI.PollId
|
We are aware that all that STUFF is doing is trimming the leading , off of the text that FOR XML PATH is generating.
Example 2: Insert One String Into Another String at a Specific Location
We can use the stuff function to replace or insert new string into the existing string as given below:
---- declare table variable to store the comments
DECLARE @UserInputs TABLE
(
PollId Int, PollSubject Varchar(250), UserComments Varchar(250)
)
----- Insert Values into table variable
INSERT INTO
@UserInputs ( PollId,
PollSubject, UserComments)
VALUES
(1, 'Most favourite
super hero is ? for kids', 'Superman' ),
(2, 'Most favourite
movie is ? in Cinema', 'Titanic'),
(3, 'Most favourite Game
is ? in the world.' ,'Cricket')
----- Table Variable output
SELECT PollId, PollSubject,
UserComments FROM @UserInputs
----- Insert One String Into Another String at a
Specific Location
----- by using stuff function
SELECT PollId
,UserInputs=STUFF(PollSubject, CHARINDEX('?', PollSubject), 1, UserComments)
FROM
@UserInputs
ORDER BY PollId
|
SQL Stuff () Vs REPLACE()
One of the more important aspects of STUFF and at least one huge difference between STUFF and REPLACE when both are used to replace things.
For example, STUFF can stuff a string into an existing string without replacing any of the original string. REPLACE cannot.
REPLACE will replace ALL instances of the search string with the replacement string in the original string. STUFF only does one instance and must be tightly controlled by position rather than by existence.
Stuff () - This function can be used for delete a certain
length of the string and insert a new string in the deleted place.For example, STUFF can stuff a string into an existing string without replacing any of the original string. REPLACE cannot.
REPLACE will replace ALL instances of the search string with the replacement string in the original string. STUFF only does one instance and must be tightly controlled by position rather than by existence.
STUFF Syntax: STUFF (String, StartPos, LengthofReplaceChar, ReplaceString)
String - String to be overwritten
StartPos - Starting Position for overwriting
LengthofReplaceChar - Length of replacement string
ReplaceString - String to overwrite
REPLACE()- This function replaces all the occurrences of a string expression with a new string within an input string.
REPLACE Syntax: REPLACE (String, StringToReplace, StringTobeReplaced)
String - Input String
StringToReplace - The portion of string to replace
StringTobeReplaced - String to overwrite
Conclusion
STUFF is likely to be more flexible. Just depends on your needs. The STUFF string function inserts a string into
another string. It deletes a specified
length of characters in the first string at the start position and then inserts
the second string into the first string at the start position.
No comments:
Post a Comment