STUFF ( original_string, start_position , length , replaceWith_string )
Insert a string into another.
Start_position: position where the replace starts on the originalString
Length: # of character to be replaced(deleted) on the originalString
If start_position <= 0, then return NULL
If length < 0, then returns NULL
If start_position > length of originalString, then returns NULL
If length >= length of originalString, will be deleted to 1st character of originalString.
/***************************************/
/* STUFF function rules with examples */
/***************************************/
DECLARE @original_str VARCHAR(50) = 'Hello World',/* length = 11 */ @replaceWith_str VARCHAR(50) = 'ABC'; SELECT -- If start_position <= 0, then return NULL STUFF(@original_str, -1, 1, @replaceWith_str) AS output1, -- If length < 0, then returns NULL STUFF(@original_str, 1, -1, @replaceWith_str) AS output2, -- If length = 0, then returns @replaceWith_str will be inserted -- between start_position and start_position + 1 STUFF(@original_str, 2, 0, @replaceWith_str) AS output3, -- If start_position > length of originalString, then returns NULL STUFF(@original_str, LEN(@original_str) + 1, 1, @replaceWith_str) AS output4, -- If length >= length of originalString, will be deleted to 1st character of originalString. STUFF(@original_str, 1, LEN(@original_str) + 1, @replaceWith_str) AS output5, -- Notice that even though length of @replaceWith_str < length of @original_str. Does not matter because there's 10 character to be deleted from the @original_str STUFF(@original_str, 1, 10, @replaceWith_str) AS output6, -- if replace with string is empty, this act as an earaser. This will delete the first 2 character of the original string STUFF(@original_str, 1, 2, '') AS output7;
/*************************************************/
/* Mask a SSN. Format 123889999 to 123-88-9999 */
/************************************************/
DECLARE @SSN CHAR(9) = '123889999'; SELECT STUFF(STUFF(@SSN, 4, 0,'-'), 7, 0, '-') AS SSN
/***************************************************/
/* Mask a SSN. Format 123889999 to XXXXX9999 */
/*************************************************/
DECLARE @SSN CHAR(9) = '123889999'; SELECT STUFF(@SSN, 1, 5, 'XXXXX') AS Last4_SSN , STUFF(@SSN, 1, 5, REPLICATE('X',5)) AS Last4_SSN;
/******************************/
/* Concatenate strings */
/*****************************/
/* Concatenate strings */
/*****************************/
USE AdventureWorks2012; GO SELECT TOP(5) FirstName, LastName , STUFF(FirstName + ' ', LEN(FirstName) + 1, 0, ' ' + LastName) AS Name FROM PERSON.PERSON ORDER BY FirstName, LastName;
No comments:
Post a Comment