Όπως είχαν αναφέρει και σε προηγούμενο post με την αναμόρφωση του SqlSchool.gr χρειάστηκα να γράψω αρκετό κώδικα σε T-SQL και είχα υποσχεθεί ότι θα το μοιραστώ μαζί σας.
Ένα από αυτό είναι να κάνω split με βάση κάποιο delimiter και τα αποτελέσματα του να τα πάρω σε κάποιο array, που δεν έχω φυσικά στον SQL Server, και έτσι αυτός γίνεται table.
Αν και πιστεύω ότι αρκετοί θα έχετε υλοποιήσει κάτι τέτοιο εντούτοις σας παραδίδω και την δικιά μου εκδοχή.
CREATE FUNCTION [dbo].[fnSplitString](@string VARCHAR(8000), @delimiter CHAR(1))
RETURNS @rv TABLE (row_values VARCHAR(8000))
AS
BEGIN
DECLARE @index INT ;
DECLARE @_string VARCHAR(8000) ;
SET @index = 1 ;
IF LEN(@string)<1 OR @string IS NULL
BEGIN
RETURN;
END
WHILE ( @index != 0 )
BEGIN
SET @index = CHARINDEX(@delimiter,@string) ;
IF ( @index !=0 )
SET @_string = LEFT(@string,@index - 1) ;
ELSE
SET @_string = @string ;
IF ( LEN(@_string) > 0 )
INSERT INTO @rv(row_values) VALUES(@_string) ;
SET @string = RIGHT(@string,LEN(@string) - @index) ;
IF LEN(@string) = 0 BREAK ;
END ;
RETURN ;
END ;
GO
Και ένα παράδειγμα εκτέλεσης αυτής
SELECT * FROM dbo.fnSplitString('antonios;chatzipavlis;sql;school;greece',';');
GO
Και τα αποτελέσματα της είναι τα παρακάτω
row_values
-----------------------------
antonios
chatzipavlis
sql
school
greece
(5 row(s) affected)