2009-08-13 7 views
0

Voici une fonction fractionnée, elle peut s'appliquer en tant que dbo.Split('sf,we,fs,we',','), lorsque je change la chaîne en nom de colonne, cela ne fonctionne pas, par exemple dbo.Split(table.columnName,',').Colonne séparée par des virgules séparées par des données SQL sur le délimiteur

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

est des œuvres mais

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

a un message d'erreur:

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

La fonction est ici:

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 

dont il est refered à: SQL 2005 Split Comma Separated Column on Delimiter

Ou quelqu'un peut me donner une fonction similaire qui peut diviser une colonne en deux

+0

Pourriez-vous élaborer sur la partie "ça ne marche pas"? –

+1

La fonction fonctionne sur une valeur varchar, pas sur une colonne. Cette valeur pourrait provenir d'une colonne, bien sûr. Vous utilisez ceci pour normaliser les données CSV dans les multiples colonnes qu'il aurait dû stocker depuis le début, non? – 48klocs

Répondre

1

C'est parce que la fonction retourne une TABLE.

SELECT Split(myColumn) FROM myTable 

signifiera

SELECT myOutputTableFromSplit FROM myTable 

Cela signifie, retourner une table de la table & SQL ne peut pas le faire.

+0

Non, je ne veux pas dire que, j'ai été utilisé SELECT * FROM dbo.Split ((Sélectionnez le top 1 utilisateurs.Email des utilisateurs), '@') –

+0

Je veux juste exactement le même résultat que le lien: http://stackoverflow.com/questions/951401/sql-2005-split-comma-separated-column-on-delimiter Merci pour votre réponse –

+0

Je sais aussi qu'il retourne une table, et je veux aussi transférer la ligne de cette table à colonne –

Questions connexes