2009-08-13 16 views
0

Hier ist eine Split-Funktion, kann es als dbo.Split('sf,we,fs,we',',') gelten, wenn ich die Zeichenfolge zu Spaltennamen ändern, funktioniert es nicht, wie dbo.Split(table.columnName,',').SQL Split Comma Getrennt Spalte auf Delimiter

Select * from dbo.Split('[email protected]','@') 

Werke ist aber

Select * from dbo.Split((Select Email from Users),'@') 

hat eine Fehlermeldung:

Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near '('. 
Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near ',' 

Die Funktion ist hier:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER FUNCTION [dbo].[Split] (@String varchar(8000), @Delimiter char(1))  
    returns @temptable TABLE (items varchar(8000))  
    as  
    begin  
     declare @idx int  
     declare @slice varchar(8000)  

     select @idx = 1  
      if len(@String)<1 or @String is null return  

     while @idx!= 0  
     begin  
      set @idx = charindex(@Delimiter,@String)  
      if @idx!=0  
       set @slice = left(@String,@idx - 1)  
      else  
       set @slice = @String  

      if(len(@slice)>0) 
       insert into @temptable(Items) values(@slice)  

      set @String = right(@String,len(@String) - @idx)  
      if len(@String) = 0 break  
     end 
    return  
    end 

, die es zu refered ist: SQL 2005 Split Comma Separated Column on Delimiter

Oder jemand kann mir eine ähnliche Funktion geben, die eine Spalte in zwei teilen kann

+0

Könnten Sie bitte den Teil "es funktioniert nicht" näher erläutern? –

+1

Die Funktion arbeitet mit einem Varchar-Wert, nicht mit einer Spalte. Dieser Wert könnte natürlich von einer Spalte kommen. Sie verwenden dies, um CSV-Daten in die mehreren Spalten zu normalisieren, in denen es von Anfang an gespeichert sein sollte, oder? – 48klocs

Antwort

1

Das ist, weil die Funktion eine TABLE zurückgibt.

SELECT Split(myColumn) FROM myTable 

wird

SELECT myOutputTableFromSplit FROM myTable 

bedeuten Es bedeutet, eine Tabelle aus der Tabelle & SQL zurückgeben kann das nicht tun.

+0

Nein, ich meine das nicht, ich habe verwendet SELECT * FROM dbo.Split ((Wählen Sie Top 1 Users.Email Von Benutzern), '@') –

+0

Ich möchte nur genau das gleiche Ergebnis wie der Link: http://stackoverflow.com/questions/951401/sql-2005-split-comma-separated-column-on-demlimiter Vielen Dank für Ihre Antwort –

+0

Ich weiß auch, dass es eine Tabelle zurückgibt, und ich möchte auch diese Tabelle Zeile übertragen Säule –

Verwandte Themen