Split fonksiyonunu bilirsiniz. Bir string’i başka bir string veya karaktere göre parçalamaya yarar. Bu parçalama işleminden sonra artık elimizde bir string dizisi oluşur. Sql için bu dizi değil tek kolonlu bir tablodur.
Amacımız bir Sql için özel bir split fonksiyonu oluşturup bu fonksiyonun içerisine split edilecek string’i ve karakteri gönderirken yanında bir de parçalanmış diziden kaçıncısını istiyorsak onu göndereceğiz. Fonksiyon normal split işlemini yaptıktan sonra bizim kaçıncı elemanı istediğimizi de bildiği için sadece o elemanı gönderecek.
Normal Split Fonksiyonu
Sql için kullanılan STRING_SPLIT fonksiyonu geriye tablo gönderir. Tablo gönderdiği için fonksiyon FROM kısmından sonra kullanılabilir.
1 |
SELECT VALUE FROM STRING_SPLIT('Kodblogum, Fatih, Yıldırım',',') |
Sql serverin kendi split fonksiyonunun nasıl çalıştığını incelemek isterseniz Sql Split Fonsiyonu adlı yazımızı inceleyebilirsiniz.
Özel Split Fonksiyonu
Şimdi bu string_split fonksiyonunu kullanarak kendi scalar-valued fonksiyonumuzu yazalım. Amacımız SELECT kısmından sonra kullanabileceğimiz sadece bir string geri dönen fonksiyon yapmak.
1 |
SELECT dbo.SPLIT_STRING_ROW('Kodblogum, Fatih, Yıldırım',',',2) as VALUE |
Görüldüğü gibi fonksiyonumuz artık SELECT’den sonra kullanılır ve split işleminden sonra kaçıncı elemanı almak istiyorsak onu rakam olarak göndeririz.
Fonksiyon Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author:<Fatih YILDIRIM> -- Create date: <20.12.2019> -- Description: <fonksionda, split edilen kaçıncı elemanı istiyorsanız onu gönderin> -- ============================================= CREATE FUNCTION [dbo].[SPLIT_STRING_ROW] ( @string NVARCHAR(2000), @split NVARCHAR(10), @row_count INT ) RETURNS NVARCHAR(2000) AS BEGIN DECLARE @value NVARCHAR(2000); SET @value = ( SELECT TOP 1 split_value1 FROM ( SELECT VALUE AS split_value1, ROW_NUMBER() OVER (ORDER BY CURRENT_TIMESTAMP) AS row_count FROM STRING_SPLIT(@string,@split) ) split_table WHERE row_count = @row_count ); RETURN @value; END |