我编写了一个函数,该函数返回一个包含单列的表,数据分隔为“|”。
如果将参数传递给函数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
答案 0 :(得分: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
答案 1 :(得分:0)
你的@List变量应该是一个包含多列的表,比如
DECLARE @List TABLE(col1 varchar(8000),col2 varchar(8000),col3 varchar(8000))
因此,您需要提前知道字符串部分的数量。
我知道这可能不是你所需要的,但我不确定,如果你能以任何其他方式做你想做的事。
希望它有所帮助