SQLServer中将字符串的列转行和行转列


/*

如讲以某个字符相隔的字符串转换为表
如字符串 Nothing ,is impossible,to,a,willing,heart
--列转行
 select * from udf_ConvertStrtoTable('Nothing ,is impossible,to,a,willing,heart',',')
 --行转列
 select * into #temp from udf_ConvertStrtoTable('Nothing ,is impossible,to,a,willing,heart',',')
 --将上面同样的查询结果写入临时表 #temp
 select stuff((select ','+A.Item from #temp A order bu Iden for xml path(''),1,1,'') As Result
 drop Table #temp --删除临时表
*/

CREATE FUNCTION [dbo].[udf_ConvertStrtoTable]
(@Str NVARCHAR(MAX),
@SplitSymbol CHAR(1)=',')
RETURNS @aTable Table
( 
Iden int,
Item varchar(500)
)
 as begin
  declare @i INT
   SET @i=0
   while RIGHT(@Str,1)=@SplitSymbol
   set @Str=LEFT(@Str,LEN(@Str)-1)
   declare @iIndex int
   set  @iIndex=CHARINDEX(@SplitSymbol,@Str)
   while @iIndex>0
	   begin
	   set @i=@i+1
	   Insert into @aTable
	   ( Iden ,Item )values(@i,LEFT(@Str,@iIndex-1))
	   select @Str=substring(@Str,@iIndex+1,6000)
	   set @iIndex=Charindex(@SplitSymbol,@Str)
	  end
	  if ltrim(rtrim(@Str))<>''
	  begin 
	  insert into @aTable  ( Iden ,Item ) values (@i+1,@Str)
	  end 
  return
  end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值