Skip to content

Instantly share code, notes, and snippets.

@gabrielfreirebraz
Created November 23, 2023 13:30
Show Gist options
  • Save gabrielfreirebraz/41fcef633a70167ce81700eb0a2767ec to your computer and use it in GitHub Desktop.
Save gabrielfreirebraz/41fcef633a70167ce81700eb0a2767ec to your computer and use it in GitHub Desktop.
CREATE FUNCTION [dbo].[F_SPLIT_STRING]( @STRING NVARCHAR (MAX), @DELIMITER NVARCHAR (10) )
RETURNS @VALUETABLE TABLE ([VALUE] NVARCHAR(MAX))
BEGIN
DECLARE @NEXTSTRING NVARCHAR(4000)
DECLARE @POS INT
DECLARE @NEXTPOS INT
DECLARE @COMMACHECK NVARCHAR(1)
IF (@STRING IS NULL)
BEGIN
INSERT INTO @VALUETABLE ( [VALUE]) VALUES ('')
END
ELSE
BEGIN
--INITIALIZE
SET @NEXTSTRING = ''
SET @COMMACHECK = RIGHT(@STRING,1)
--CHECK FOR TRAILING COMMA, IF NOT EXISTS, INSERT
--IF (@COMMACHECK <> @DELIMITER )
SET @STRING = @STRING + @DELIMITER
--GET POSITION OF FIRST COMMA
SET @POS = CHARINDEX(@DELIMITER,@STRING)
SET @NEXTPOS = 1
--LOOP WHILE THERE IS STILL A COMMA IN THE STRING OF LEVELS
WHILE (@POS <> 0)
BEGIN
SET @NEXTSTRING = SUBSTRING(@STRING,1,@POS - 1)
INSERT INTO @VALUETABLE ( [VALUE]) VALUES (@NEXTSTRING)
SET @STRING = SUBSTRING(@STRING,@POS +1,LEN(@STRING))
SET @NEXTPOS = @POS
SET @POS = CHARINDEX(@DELIMITER,@STRING)
END
END
RETURN
END
@gabrielfreirebraz
Copy link
Author

Works fine as alternative of native STRING_SPLIT (when its't give us necessary requisites)
https://learn.microsoft.com/pt-br/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver16

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment