SORU
30 Mart 2009, PAZARTESİ


Fonksiyon eşdeğer T-SQL Split?

Split için arıyorum '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15...' (virgülle ayrılmış) tablo veya tablo değişkeni.

Herkes bir satır her biri döndüren bir işlevi var mı?

CEVAP
30 Mart 2009, PAZARTESİ


Burada eski moda çözüm biraz:

/*
    Splits string into parts delimitered with specified character.
*/
CREATE FUNCTION [dbo].[SDF_SplitString]
(
    @sString nvarchar(2048),
    @cDelimiter nchar(1)
)
RETURNS @tParts TABLE ( part nvarchar(2048) )
AS
BEGIN
    if @sString is null return
    declare	@iStart int,
    		@iPos int
    if substring( @sString, 1, 1 ) = @cDelimiter 
    begin
    	set	@iStart = 2
    	insert into @tParts
    	values( null )
    end
    else 
    	set	@iStart = 1
    while 1=1
    begin
    	set	@iPos = charindex( @cDelimiter, @sString, @iStart )
    	if @iPos = 0
    		set	@iPos = len( @sString ) 1
    	if @iPos - @iStart > 0			
    		insert into @tParts
    		values	( substring( @sString, @iStart, @iPos-@iStart ))
    	else
    		insert into @tParts
    		values( null )
    	set	@iStart = @iPos 1
    	if @iStart > len( @sString ) 
    		break
    end
    RETURN

END

SQL Server 2008'de aynı sonuçlar elde ediliyor .NET kodu. Belki daha hızlı olur ama kesinlikle bu yaklaşım yönetmek daha kolay.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Artorius FullPower

    Artorius Ful

    29 Temmuz 2007
  • gsipek

    gsipek

    20 Temmuz 2007
  • jesiel santos

    jesiel santo

    15 Ocak 2009