declare @aaa varchar(200) 
set @aaa='a1234 ab2 xb'declare @k1 varchar(200) 
declare @k2 varchar(200) 
declare @k3 varchar(200) select @k1,@k2,@k3需要把@aaa里的字段以空格分割
@k1 要= 'a1234'
@k2 要= 'ab2'
@k3 要= 'xb'需要能动态判断有几个空格
如果@aaa='aa'
那就   @k1='aa'   @k2 ='' @k3=''
如果 @aaa='a1 lk'
@k1='a1'   @k2='lk' @k3=''哪位高手能指点下怎么写sql  谢谢

解决方案 »

  1.   

    declare @aaa varchar(200)  
    set @aaa='a1234 ab2 xb'SELECT LEN(@AAA)-LEN(REPLACE(@AAA,' ',''))
      

  2.   

    declare @aaa varchar(200)  
    set @aaa='a1234 ab2 xb'declare @k1 varchar(20)  
    declare @k2 varchar(20)  
    declare @k3 varchar(20)  
    declare @k4 varchar(20) 
    select 
    @k1 = parsename(replace(@aaa,' ' , '.'),4),
    @k2 = parsename(replace(@aaa,' ' , '.'),3),
    @k3 = parsename(replace(@aaa,' ' , '.'),2),
    @k4 = parsename(replace(@aaa,' ' , '.'),1)print @k1
    print @k2
    print @k3
    print @k4/*
     
    a1234
    ab2
    xb*/
      

  3.   

    使用parsename函数,自己对应把数据装入变量即可.
      

  4.   


    declare @aaa varchar(200)  
    set @aaa='a1234 ab2 xb'declare @j int;set @j=1
    while(@j<=len(@aaa)-len(replace(@aaa,' ',''))+1)
    begin
    select PARSENAME(replace(@aaa,' ','.'),cast(@j as varchar(10))) 
    set @j=@j+1
    end
      

  5.   

    感谢版主原来SQL有那么方便的字符串处理函数=.=  以前一直不知道
      

  6.   


    declare @strText varchar(100),
    @strResule varchar(300)
    set @strText = '  12345 12 123  '
    set @strResule = replace(replace(@strText, ' ', ', '''','), ',,', ',')
    select @strResule = case when left(@strResule, 1) = ',' then right(@strResule, len(@strResule) - 1) else @strResule end
    select @strResule = 'select ' + case when right(@strResule, 1) = ',' then left(@strResule, len(@strResule) - 1) else @strResule end
    exec(@strResule)