SQL Split

Bazen Sql’ de bir değeri kısım kısım ayırma gereği duyarız ne yazikki sql bu durumu tam olarak karşılayacak hazırda bir fonksiyona sahip değildir. Bu yüzden de oturup kendiniz yazmanız gerekir. bende en çok kullandığım ve geriye belirtilen sıradaki değeri döndüren sql fonksiyonunu sizlerle paylaşıyorum.

CREATE FUNCTION [dbo].[fString_Split]
(
       -- Add the parameters for the function here
       @orj_string NVARCHAR(MAX),
       @count INT,
       @split_char NVARCHAR(1)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
       -- Declare the return variable here
       DECLARE @orj NVARCHAR(MAX)
       -- Add the T-SQL statements to compute the return value here
 
       DECLARE @dot_count INT
       DECLARE @cikarilan NVARCHAR(MAX)
       DECLARE @dongu INT
       DECLARE @kalan NVARCHAR(MAX)
       SET @dongu = 1
       SET @orj = @orj_string
       SET @cikarilan = @orj_string
       SET @dot_count = (LEN(@orj_string) - LEN(REPLACE(@orj_string, @split_char, '')))
 
       BEGIN
       WHILE (@dongu <= @count)
       BEGIN
             BEGIN
                    IF ((LEN(@cikarilan) - LEN(REPLACE(@cikarilan, @split_char, ''))) > 0)
                    BEGIN
                        SET @kalan = @cikarilan
                        SET @cikarilan = SUBSTRING(@cikarilan, charindex(@split_char, @cikarilan) + 1, LEN(@cikarilan))
                        SET @kalan = SUBSTRING(@kalan, 0, charindex(@split_char, @kalan))
                    END
                    ELSE
                    BEGIN
                        IF (@count <= @dot_count + 1)
                        BEGIN
                            SET @kalan = @cikarilan
                        END
                        ELSE
                            SET @kalan = ''
                    END
             END
 
             SET @dongu = @dongu + 1
       END
       END
 
       -- Return the result of the function
       RETURN REPLACE(@kalan, @split_char, '')
 
END

Kullanımıda aşağıdaki şekildedir;

select dbo.fString_Split('Deee-ZZZZ-ffff-gggg-wwwww',1,'-')
Etiket(ler): , .Yer işareti koy Kalıcı Bağlantı.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir