0

データが「|」で区切られた単一の列を持つテーブルを返す関数を作成しました。

関数にパラメータを渡す場合の例funsplit('SAGAR|INDIA|MUMBAI','|')

次のように返されます

Item<Column Name>
SAGAR
INDIA
MUMBAI

私はそれが欲しい

COLUMN 1   COLUMN2    COLUMN3
-----------------------------
SAGAR      INDIA      MUMBAI

これが私の機能です

ALTER FUNCTION [dbo].[funSplit]
(
    @sInputList Varchar(8000), -- List of delimited items  
    @sDelimiter VarChar(8000) = ',' -- delimiter that separates items  
)
Returns @List Table (item VarChar(8000))  
Begin  
 Declare @sItem VarChar(8000)  

 While CharIndex(@sDelimiter,@sInputList,0) <> 0  
  Begin  
   Select   
   @sItem=RTrim(LTrim(SubString(@sInputList,1,CharIndex(@sDelimiter,@sInputList,0)-1))),  
   @sInputList=RTrim(LTrim(SubString(@sInputList,CharIndex(@sDelimiter,@sInputList,0)+Len(@sDelimiter),Len(@sInputList))))  

   If Len(@sItem) > 0  
    Insert Into @List Select @sItem  
 End  

 If Len(@sInputList) > 0  
  Insert Into @List Select @sInputList -- Put the last item in  

 Return  
End
4

2 に答える 2

1

これにより、結果が転置されます。

select *
from
(
 SELECT Row_Number() over(order by Item) rn,  Item 
 from dbo.funsplit('SAGAR|INDIA|MUMBAI','|')
) src
PIVOT 
(Max(Item) for rn in ([1],[2],[3])) p

順序が重要な場合は、関数からその順序を返す必要があります

列が変数の場合、動的 SQL を使用して上記を作成し、使用できます。sp_executesql

于 2012-09-07T11:09:33.107 に答える
0

@List 変数は、次のような複数の列を持つテーブルにする必要があります

DECLARE @List TABLE(col1 varchar(8000),col2 varchar(8000),col3 varchar(8000))

したがって、事前に stringparts の数を知る必要があります。

これはおそらくあなたが必要としているものではないことはわかっていますが、他の方法でやりたいことができるかどうかはわかりません.

それが少し役立つことを願っています

于 2012-09-07T11:09:09.700 に答える