日期:2014-05-17  浏览次数:20582 次

在线等,着急用,sql操作拆分字段内容
原始表如下图

通过sql语句或试图都可以,拆分成如图

就是把名字和首字母都拆成没行只有一个名字,上图还少了个功能,就是count值为如果两个名字拆分两条每条的count值要加起来,大概就是这个意思了,希望高手指教,要详细的,创建表语句
CREATE TABLE [dbo].[test](
[Author] [nvarchar](500) NULL,
[count] [int] NULL,
[hits] [int] NULL,
[Py] [nvarchar](30) NULL
) ON [PRIMARY]

GO
数据自己插两条吧

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

CREATE TABLE [dbo].[test](
[Author] [nvarchar](500) NULL,
[count] [int] NULL,
[hits] [int] NULL,
[Py] [nvarchar](30) NULL
) ON [PRIMARY]

GO

insert Into test
select '白晨,彭杰,李金兵',1,0,'b,p,l'
go


--1.拆分函数
if exists(select * from sys.objects where name = 'f_splitSTR' and type = 'tf')
   drop function dbo.f_splitSTR
go

create function dbo.f_splitSTR
(
@s1 varchar(8000),     --要分拆的字符串
@s2 varchar(8000),
@split varchar(10)    --分隔字符

returns @re table(                      --要返回的临时表
                     col_1 varchar(1000),  --临时表中的列 
                     col_2 varchar(1000)
                 )
as
begin   
  declare @len int
  
  set @len = LEN(@split)      --分隔符不一定就是一个字符,可能是2个字符
  
  while CHARINDEX(@split,@s1) >0 or CHARINDEX(@split,@s2)>0
  begin
insert into @re 
values(left(@s1,charindex(@split,@s1) - 1),
       left(@s2,charindex(@split,@s2) - 1))

set @s1 = STUFF(@s1,1,charindex(@split,@s1) - 1 + @len ,'')    --覆盖:字符串以及分隔符
set @s2 = STUFF(@s2,1,charindex(@split,@s2) - 1 + @len&n