declare @string nvarchar(4000)
declare @ch nvarchar(4000)
set @string='abc|acdb|c|ddd'+'|'
while (@string<>'')
begin
     set @ch=left(@string,charindex('|',@string,1)-1)
     print @ch
     set @string=stuff(@string,1,charindex('|',@string,1),'') 
end
-----------------------------
abc
acdb
c
ddd

解决方案 »

  1.   

    谢谢楼上的回复,但如果数据是这样的,我应如处理呢.
    string=001|acdb|c|ddd|002|acdb|c|ddd
    我需要的结果是
    001|acdb|c|ddd
    001
    acdb
    c
    ddd
    002|acdb|c|ddd
    002
    acdb
    c
    ddd
      

  2.   

    --楼主不说,那我猜测一下.
    declare @string nvarchar(4000)
    declare @ch1 nvarchar(4000)
    declare @ch2 nvarchar(4000)
    set @string='001|acdb|c|ddd|002|acdb|c|ddd'+'|0'
    while (@string<>'')
    begin
       set @ch1=left(@string,charindex('|0',@string,1)-1)       
       print @ch1
       set @ch1=@ch1+'|'
       while(@ch1<>'')
       begin
          set @ch2=left(@ch1,charindex('|',@ch1,1)-1)
          print @ch2
          set @ch1=stuff(@ch1,1,charindex('|',@ch1,1),'')
       end
       set @string=stuff(@string,1,charindex('|0',@string,1)+1,'')
    end--------------------
    返回结果001|acdb|c|ddd
    001
    acdb
    c
    ddd
    02|acdb|c|ddd
    02
    acdb
    c
    ddd
      

  3.   

    --稍微改一下,002变成02了,呵呵 :)declare @string nvarchar(4000)
    declare @ch1 nvarchar(4000)
    declare @ch2 nvarchar(4000)
    set @string='001|acdb|c|ddd|002|acdb|c|ddd'+'|0'
    while (@string<>'0')
    begin
       set @ch1=left(@string,charindex('|0',@string,1)-1)       
       print @ch1
       set @ch1=@ch1+'|'
       while(@ch1<>'')
       begin
          set @ch2=left(@ch1,charindex('|',@ch1,1)-1)
          print @ch2
          set @ch1=stuff(@ch1,1,charindex('|',@ch1,1),'')
       end
       set @string='0'+stuff(@string,1,charindex('|0',@string,1)+1,'')
    end
    -------
    返回001|acdb|c|ddd
    001
    acdb
    c
    ddd
    002|acdb|c|ddd
    002
    acdb
    c
    ddd