在SqlServer中把字符串以某个字符分隔,相当于其他编程语言中的split函数,把结果存储到临时表中,用游标逐行读取

原创 2007年10月10日 09:12:00

在SqlServer中把字符串以某个字符分隔,相当于其他编程语言中的split函数,把结果存储到临时表中,此处用函数来表示,(转贴)

 
/*--字符串分函数  
   
  分拆指定分隔符的的字符串,返回结果表  */
   
  /*--调用示例  
   
  SELECT   *   FROM   f_splitSTR('aa     ba   b','a   ')  
  --*/  
  CREATE   FUNCTION   f_splitSTR(  
  @s   varchar(8000),       --要分拆的字符串  
  @split   varchar(10)     --数据分隔符  
  )RETURNS   @re   TABLE(col   varchar(100))  
  AS  
  BEGIN  
  DECLARE   @splitlen   int  
  SET   @splitlen=LEN(@split+'a')-2  
  WHILE   CHARINDEX(@split,@s)>0  
  BEGIN  
  INSERT   @re   VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))  
  SET   @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')  
  END  
  INSERT   @re   VALUES(@s)  
  RETURN  
  END

  /*--调用示例  
   
  SELECT   *   FROM   f_splitSTR('aa     ba   b','a   ')  
  --*/  
如果需要对该表进行逐行操作,可以为该临时表加上游标(动态或静态),利用游标来对每一行进行需要的操作:

如下:

    declare @splitStrN varchar(100)
    declare leftcursor cursor --scroll dynamic --可以加在cursor后边,以表示是动态游标
    /*scroll表示可随意移动游标指针(否则只能向前),dynamic表示可以读写游标(否则游标只读)*/
    for
    SELECT * FROM f_splitSTR('1,51,24,13,26',',')
    --打开游标
    open leftcursor
     
    fetch next from leftcursor into @splitStrN
    while(@@fetch_status=0)
     begin
      if((@splitStrN is null) or (@splitStrN=''))
       begin
        set @splitStrN='0'
       end
      else
       begin
        print @splitStrN
       end
      fetch next from leftcursor into @splitStrN
     end
    --关闭游标
    close leftcursor
    --删除游标引用
    deallocate leftcursor

 

如果有不明白的地方可以联系我,chshdu@163.com,上边拆分字符串的函数是从网络上别人写好的,我当了下来,如果不当的地方,请联系我,我会马上删除,在此致谢!

sqlserver中利用Tran_sql把逗号分隔的字符串拆成临时表

在与数据库交互的过程中,我们经常需要把一串ID组成的字符串当作参数传给存储过程获取数据。很多时候我们希望把这个字符串转成集合以方便用于in操作。 有两种方式可以方便地把这个以某种符号分隔的ID字符串转...
  • shejiangao
  • shejiangao
  • 2014年06月14日 13:39
  • 735

sql 将逗号分割的字符串存入临时表

declare @tempstr varchar(max) set @tempstr=N'54,57,55,56,59' set @Xmlstr=ConVERT(xml,'' + REPLAC...
  • zwk_9
  • zwk_9
  • 2014年08月14日 15:53
  • 1027

MySQL字符分割并存储到临时表中

创建存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `split`(in _string varchar(300)) BEGIN # 求分割符号',...
  • lixwjava
  • lixwjava
  • 2016年12月01日 22:43
  • 1135

以指定分隔符分割字符串存储到vector中

示例: 8:00起售车站:北京西、南京、南京南、同江
  • yangyangsnr
  • yangyangsnr
  • 2016年12月24日 23:29
  • 1326

sql把结果集插入临时表的方法

1----------select * into #orderby from ( select top 10 * from T_Lines )  table    2----------create ...
  • hhwydwfg
  • hhwydwfg
  • 2010年08月06日 10:39
  • 1365

sqlserver以逗号分割的字符串拆分到临时表

alter FUNCTION [dbo].[func_split](@str nvarchar(4000),@separtor varchar(10))      returns @temp tab...
  • o0wufan0o
  • o0wufan0o
  • 2013年04月25日 17:41
  • 3240

sql存储过程中分隔字符串

sql存储过程中分隔字符串
  • qq_34149805
  • qq_34149805
  • 2017年05月03日 22:09
  • 1296

perl——当split函数用空格做分隔符时

## 语法 split /PATTERN/,EXPR split /PATTERN/ split split用来分隔字符串EXPR,在列表上下文中返回分隔后的列表,在标量上下文中返回列表长度。 ...
  • Aggressive_snail
  • Aggressive_snail
  • 2017年03月22日 10:37
  • 3919

Shell 逐行读取文本中的字符串 处理 并打印到新的文本中

!#/bin/bash H=·pwd· filename=$H/Tsinghua.scp cat $filename | while read line ;do new_str=$(echo ...
  • rooki_men
  • rooki_men
  • 2017年03月14日 14:06
  • 1221

实现一个以空白符分隔字符串的split函数

【阅读提示】通过本文你将实际了解如何用gcc/g++编译多个c/cpp文件;如何实现将一行字符串分隔成单个单词的split函数;另外还将看到一些常见的错误处理办法以及如何将一个程序分成几个cpp文件的...
  • ahnselina
  • ahnselina
  • 2013年11月27日 17:49
  • 1983
收藏助手
不良信息举报
您举报文章:在SqlServer中把字符串以某个字符分隔,相当于其他编程语言中的split函数,把结果存储到临时表中,用游标逐行读取
举报原因:
原因补充:

(最多只允许输入30个字)