MS SQL 拆分逗号并检索字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MS SQL 拆分逗号并检索字段相关的知识,希望对你有一定的参考价值。

create table curtest (djbh varchar(20) primary key,sales varchar(20))
go
insert curtest
select ‘A1‘,‘01,02,03‘ union all           --创建表并插入记录
select ‘A2‘,‘01,02‘  union all
select ‘A3‘,‘02,03‘  union all
select ‘A4‘,‘02,03,04‘  
go

declare cur_test cursor for select * from curtest    --声明游标
declare @djbh varchar(20)                            --定义变量单据编号
declare @sales varchar(20)                            --定义变量销售
declare @star int,@len int,@dhwz int                -- 定义变量开始,长度,逗号位置
open cur_test                                        --打开游标
fetch next from cur_test into @djbh,@sales            --获取第一条记录
while(@@FETCH_STATUS=0)                                --根据返回状态确认执行结果。0代表成功
begin
set @star=1                                            --对开始位置赋值1
set @dhwz=CHARINDEX(‘,‘,@sales,@star)                --获取第一个逗号位置
set @len=LEN(@sales)                                --获取字段长度
while(@star<[email protected])                                    --循环条件,开始位置小于字段长度
begin                                            
select @djbh,substring(@sales,@star,@[email protected])        --获取逗号前字符 
set @[email protected]+1                                        --每次循环,将上次逗号位置+1作为下次开始位置
set @dhwz=CHARINDEX(‘,‘,@sales,@star)                   --以上次逗号位置+1作为本次开始位置,检索下一个逗号位置
if(@dhwz=0)                                                --判断,当检索不到逗号(即返回值为0,并且已到达最后一个逗号)
begin
select @djbh,SUBSTRING(@sales,@star,(@[email protected])+1)     --最后一个逗号后字符,以上一次逗号位置+1开始,长度为字段总长度减开始位置+1
break                                                    --跳出循环    
end    
end
fetch next from cur_test into @djbh,@sales              --读取下一条记录,并重新开始执行循环(拆分并检索逗号分割字符)
end
close cur_test

技术分享

技术分享






本文出自 “marsng” 博客,请务必保留此出处http://marsng.blog.51cto.com/2693748/1787136

以上是关于MS SQL 拆分逗号并检索字段的主要内容,如果未能解决你的问题,请参考以下文章

如何根据一个字段是不是包含oracle sql中的逗号分隔字符串将单行拆分为多行?

oracle 字段比例拆分

MS-Access:在分隔符上拆分内容并与其他表连接

Oracle根据逗号拆分字段内容转成多行

mysql 两个以逗号分隔字段怎么匹配

Oracle PL/SQL 程序在源表中拆分逗号分隔的数据并推送到目标表中