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

  • Elly

    Elly

    3 EKİM 2005
  • oHeymarvin

    oHeymarvin

    11 Temmuz 2013
  • PhoneBuff

    PhoneBuff

    10 HAZİRAN 2011