2009-08-13 16 views
0

分割機能です。dbo.Split(table.columnName,',')のように、文字列を列名に変更すると、dbo.Split('sf,we,fs,we',',')として適用できます。デリミタのSQL分割カンマ区切り列

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

の作品ですが、

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

は、エラーメッセージがあります

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

機能はここにある:

それが参照されます
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 

SQL 2005 Split Comma Separated Column on Delimiter

誰かが1つの列を2つに分割できる類似の関数を与えることができます。

+0

「うまくいかない」部分について詳しく教えてください。 –

+1

この関数は、列ではなくvarchar値で動作します。その価値は、もちろん、列から来る可能性があります。 CSVデータを最初から格納しておくべき複数の列に正規化するにはこれを使用していますか? – 48klocs

答えて

1

これは、関数がTABLEを返すためです。

SELECT Split(myColumn) FROM myTable 

こと& SQLはそれを行うことはできませんテーブルからテーブルを返す、それは意味

SELECT myOutputTableFromSplit FROM myTable 

を意味します。

+0

いいえ、私は使用していないことを意味していません SELECT * FROM dbo.Split((トップ1 Users.Emailからユーザを選択)、 '@') –

+0

私はちょうどリンクと全く同じ結果を望みます: http://stackoverflow.com/questions/951401/sql-2005-split-comma-separated-column-on-delimiterあなたの応答をありがとう –

+0

私はそれがテーブルを返すことも知っている、私もこのテーブルの行を転送するカラム –