试试这个:
create table s1(姓名 varchar(10), 特长 varchar(40),体育 varchar(20),音乐 varchar(20))insert into s1
select '张三', '乒乓球|唱歌',null,null union all
select '李四', '足球|跳舞',null,null
go
select 姓名,
       特长,
       left(特长,CHARINDEX('|',特长)-1) 体育,
       SUBSTRING(特长,CHARINDEX('|',特长)+1,LEN(特长)) 音乐
from s1      
/*
姓名 特长 体育 音乐
张三 乒乓球|唱歌 乒乓球 唱歌
李四 足球|跳舞 足球 跳舞
*/

解决方案 »

  1.   

    引用楼上update s1
    set 体育=left(特长,CHARINDEX('|',特长)-1),音乐=SUBSTRING(特长,CHARINDEX('|',特长)+1,LEN(特长))
    from  s1select *
    from s1  
      

  2.   

    我用了这个
    CREATE function Get_StrArrayStrOfIndex
    (
    @str varchar(1024), --要分割的字符串
    @split varchar(10), --分隔符号
    @index int --取第几个元素
    )
    returns varchar(1024)
    as
    begin
    declare @location int
    declare @start int
    declare @next int
    declare @seed intset @str=ltrim(rtrim(@str))
    set @start=1
    set @next=1
    set @seed=len(@split)set @location=charindex(@split,@str)
    while @location<>0 and @index>@next
    begin
       set @start=@location+@seed
       set @location=charindex(@split,@str,@start)
       set @next=@next+1
    end
    if @location =0 select @location =len(@str)+1 
    --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。return substring(@str,@start,@location-@start)
    end
    调用示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2)
    返回值:9