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



No feedback yet
Leave a comment

Your email address will not be revealed on this site.
PoorExcellent
(Line breaks become <br />)
(For my next comment on this site)
(Allow users to contact me through a message form -- Your email will not be revealed!)
This is a captcha-picture. It is used to prevent mass-access by robots.

Please enter the characters from the image above. (case insensitive)

Array
Trackback address for this post
This is a captcha-picture. It is used to prevent mass-access by robots.

Please enter the characters from the image above. (case insensitive)

Array