SQL Scalar Function : Faydalı Sql Server Komutları 3
Soru :
Sql Server’da String (Alfasayısal) veri tipinde tutulan verinin içerisindeki belirli bir kısmın ayraç kullanılarak parçalara ayrılma / bölüştürme işlemi nasıl yapılabilir?
Cevap :
String (Alfasayısal) verilerin ayraç kullanarak (aşağıdaki örnekte ‘,’ virgül ayraç olarak kullanılmıştır. ) ayraçtan önceki parçanın ayrılması işlemi için aşağıdaki fonksiyon faydalı olacaktır.
...
Örnek kullanım aşağıdaki şekildedir .
* print dbo.split(‘franklin,delano,roosevelt’,1,’,')
Sonuç = franklin
* print dbo.split(‘franklin,delano,roosevelt’,2,’,')
Sonuç = delano
* print dbo.split(‘franklin,delano,roosevelt’,3,’,')
Sonuç = roosevelt
CREATE FUNCTION [dbo].[DN_Split] (@in_del_field VARCHAR(4000), @in_pos INT, @in_del VARCHAR(4000) = ‘,’) RETURNS VARCHAR(4000) AS BEGIN /** * * SPLIT Scalar User-Defined function * * The split function will take a delimted string value * and return a value from a location in the string. * * FOR EXAMPLE… * * print dbo.split(‘franklin,delano,roosevelt’,1,’,') * print dbo.split(‘franklin,delano,roosevelt’,2,’,') * print dbo.split(‘franklin,delano,roosevelt’,3,’,') * GO * * THIS RETURNS… * * franklin * delano * roosevelt * * * @param @in_del_field Delimited Text string passed to the function * @param @in_pos Position of value to return * @param @in_del Delimiter. DEFAULT value is “,” * @headcom */ DECLARE @retVal VARCHAR(4000) DECLARE @varFldDel VARCHAR(4000) SET @varFldDel = @in_del_field + ‘,’ DECLARE @i int SET @i = 0 DECLARE @varExit VARCHAR(5) SET @varExit = ‘FALSE’ DECLARE @intLastLen int SET @intLastLen = 1 – IF @in_pos; loop through till the correct column is found WHILE @varExit = ‘FALSE’ BEGIN SET @i = @i + 1 If @i >; 1 BEGIN SET @varFldDel = SUBSTRING(@varFldDel,@intLastLen,8000) END If CHARINDEX(@in_del,@varFldDel) – SET @retVal = SUBSTRING(@varFldDel,1,(CHARINDEX(@in_del,@varFldDel)-1)) SET @intLastLen = LEN(@retVal) + 2 If @i = @in_pos BREAK END – RETURN @retVal – END
Print article | This entry was posted by Soner Çalımlı on 10/05/12 at 12:55:00 am . Follow any responses to this post through RSS 2.0. |
No feedback yet
Leave a comment
Trackback address for this post