发表新主题 回复该帖子
主题:[原创]SQL 存储过程使用CHARINDEX分隔逗号,间隔的数组
jastby
帖子档案  楼主 [原创]SQL 存储过程使用CHARINDEX分隔逗号,间隔的数组   Post by : 2009-06-02 14:35:51.0
  • 幼儿园
  • 幼儿园
  • UID:2
  • 主题:126
  • 帖子:219
  • 加为好友 加为好友    发送短信 发送短信

这里假设有 一串数组变量 "appNum1,appNum2,appNum3,appNum4,appNum5,appNum6,appNum7,appNum8"

当我们需要在存储过程中遍历这个数组的子项时,我们可以通过 CHARINDEX 或者结合Left,Right来分隔和遍历它

注意:由于字符串index的计算问题,下面定义变量的时候,需要在最后面增加一个逗号",",否则遍历的时候将缺少最后一个子项

方法一:

   sql代码
  1. declare @item varchar(50),@rowName varchar(200)  
  2. declare @m int,@n int,@i int 
  3.  
  4. Set @rowName='appNum1,appNum2,appNum3,appNum4,appNum5,appNum6,appNum7,appNum8,' 
  5.  
  6. Set @m=CHARINDEX(',',@rowName)  
  7. Set @n=1  
  8. Set @i=0  
  9.  
  10. WHILE  @m>0  
  11.     BEGIN         
  12.         Set @item=SubString(@rowName,@n,@m-@n)  
  13.         Print Cast(@i as varchar)+'-'+@item  
  14.         Set @i=@i+1  
  15.         Set @n=@m+1       
  16.         Set @m=CHARINDEX(',',@rowName,@n)  
  17.     END 

方法二:

   sql代码
  1. DECLARE @s varchar(4000)  
  2. DECLARE @i int 
  3. Set @i=0  
  4.  
  5. SET @s='appNum1,appNum2,appNum3,appNum4,appNum5,appNum6,appNum7,appNum8,'     
  6. WHILE CHARINDEX(',',@s)>0     
  7.     BEGIN     
  8.         Print Cast(@i as varchar)+'-'+LEFT(@s,CHARINDEX(',',@s)-1)  
  9.         Set @i=@i+1    
  10.         SET @s=RIGHT(@s,LEN(@s)-CHARINDEX(',',@s))     
  11.     END 

两个方法的运行结果都是:
0-appNum1
1-appNum2
2-appNum3
3-appNum4
4-appNum5
5-appNum6
6-appNum7
7-appNum8

返回页面顶部  


CopyRight © 2008-2009 JavaWind.Net Studio All Rights Reserved
Powered By JWind.BBS Vesion 1.0.0 Beta1 Processed in 87 ms,0 (Queries)  Gzip enabled

WAP - 清除Cookies - 联系我们 - JavaWind.Net Studio - Archiver - TOP Valid XHTML 1.0 Transitional Valid CSS! 粤ICP备07511478号