“汇总:角码\中梃连接件\垫条\拉杆\拼管压板下料574个,中梃连接件钻孔攻丝及装箱156个,加工泡沫塞块及装箱248块。”
这样一个字符串,想分别截出
角码\中梃连接件\垫条\拉杆\拼管压板下料574个
中梃连接件钻孔攻丝及装箱156个
加工泡沫塞块及装箱248块
求方法

解决方案 »

  1.   

    charindex + substring 即可。
      

  2.   

    charindex(),第一个找冒号的位置。第二个要找逗号的位置。不固定。字符串逗号个数又不一样
      

  3.   


     DECLARE @GatherString NVARCHAR(2000)  -- 字段字符串
      DECLARE @CurrentString NVARCHAR(2000) -- 当前截取后的剩下字符串
      DECLARE @SplitString NVARCHAR(500)    -- 被截取的字符串       
      DECLARE @CurrentLength  int     -- 当前截取的长度
    DECLARE @name NVARCHAR(4000)
    CREATE TABLE #Collect
    (
       FName              NVARCHAR(200)
    )
    set @name ='汇总:角码\中梃连接件\垫条\拉杆\拼管压板下料574个,中梃连接件钻孔攻丝及装箱156个,加工泡沫塞块及装箱248块。'
    SET @GatherString  = SUBSTRING(@name,CHARINDEX(':',@name)+1 ,LEN(@name)- CHARINDEX(':',@name)) 
    -- 当前截取后的剩下字符串
    SET @CurrentString = @GatherString    
    -- 检查 ","是否在字符串中出现     
    WHILE CHARINDEX(',',@CurrentString) <> 0
    BEGIN
     -- 截取来的字符串
     SET @SplitString =  SUBSTRING(@CurrentString,0,CHARINDEX(',',@CurrentString)) 
     INSERT INTO #Collect (FName)VALUES(@SplitString)
     -- 当前总字符串的字符个数
     SET @CurrentLength = LEN(@CurrentString)
     -- 判断是否当前剩下的字符串要大于出现的位子否下次取的话会出错
     IF @CurrentLength > (CHARINDEX(',',@CurrentString)+ 1 )
       BEGIN
     -- 被截取后剩下的字符串
     SET @CurrentString = SUBSTRING(@CurrentString,CHARINDEX(',',@CurrentString)+1,@CurrentLength - CHARINDEX(',',@CurrentString))
       
    END
     ELSE 
       BEGIN
     SET @CurrentString = ''
       END
    END
    select * from   #Collectdrop table #Collect
    只能返回
    角码\中梃连接件\垫条\拉杆\拼管压板下料574个
    中梃连接件钻孔攻丝及装箱156个
      

  4.   


    declare @sc nvarchar(200),@begin int,@sql nvarchar(900)
    set @sc ='角码\中梃连接件\垫条\拉杆\拼管压板下料574个,中梃连接件钻孔攻丝及装箱156个,加工泡沫塞块及装箱248块'
    --set @sc =',1,1,1,1,1,'
    set @begin=1while CHARINDEX(',',@sc,@begin)>0
    begin 
    if isnull(@sql,'')=''
    set @sql='select '''+ substring(@sc,@begin,CHARINDEX(',',@sc,@begin)-1)+''''
    else
    set @sql=@sql+' union all select '''+ substring(@sc,@begin,CHARINDEX(',',@sc,@begin)-@begin)+''''
    set @begin=CHARINDEX(',',@sc,@begin)+1
    print @begin
    end
    --最后一个是逗号不取 
    if @begin -1<LEN(@sc)
    set @sql=@sql+' union all select '''+ substring(@sc,@begin,LEN(@sc)-(@begin-1))+''''
    --print @sql
     exec (@sql)
      

  5.   

    有点问题,如果set @sc ='汇总:下一般型材料263根。'  查询就不行了
      

  6.   

    那加一个判断咯declare @sc nvarchar(200),@begin int,@sql nvarchar(900)
    set @sc =',汇总:下一般型材料263根,'
    --set @sc =',1,1,1,1,1,'
    set @begin=1
    if CHARINDEX(',',@sc,@begin)=0
    set @sql='select '''+ @sc+''''
    else
    begin
    while CHARINDEX(',',@sc,@begin)>0
    begin 
    if isnull(@sql,'')=''
    set @sql='select '''+ substring(@sc,@begin,CHARINDEX(',',@sc,@begin)-1)+''''
    else
    set @sql=@sql+' union all select '''+ substring(@sc,@begin,CHARINDEX(',',@sc,@begin)-@begin)+''''
    set @begin=CHARINDEX(',',@sc,@begin)+1
    print @begin
    end
    --最后一个是逗号不取 
    if @begin -1<LEN(@sc)
    set @sql=@sql+' union all select '''+ substring(@sc,@begin,LEN(@sc)-(@begin-1))+''''
    end
     exec (@sql)
      

  7.   

    SqlServer中截取(获取)字符串中特定字符分割的每个元素
    SELECT CASE LEN(SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress)))
           WHEN 0 THEN REQUEST_ADDRESS
           ELSE SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress))
           END NewAddress,
           CASE LEN(SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress)))
           WHEN 0 THEN ''
           ELSE PARSENAME(REPLACE(Request_AllAddress,';','.'),2)
           END DanYuan,
           CASE LEN(SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress)))
           WHEN 0 THEN ''
           ELSE PARSENAME(REPLACE(Request_AllAddress,';','.'),1)
           END Hao,
           CASE LEN(SUBSTRING(Request_AllAddress,0,CHARINDEX(';',Request_AllAddress)))
           WHEN 0 THEN ''
           ELSE PARSENAME(REPLACE(Request_AllAddress,';','.'),3)
           END Lou
          FROM WORK_REQUEST
    WHERE REQUEST_ID=526 源字符串:
    Request_AllAddress
    天祥街;4楼;2单元;14号 执行结果:
    NewAddress DanYuan Hao  Lou
    天祥街       2单元   14号  4楼看看这个,前两天我也遇到这个问题,用这个方法是可以的,希望对你有帮助!