SQL2005 列遍历 去不规则空格 拆分截取

本文介绍了一种使用SQL Server对字段中不规则空格进行规范化处理的方法,并演示了如何通过临时表和游标来遍历数据集,实现了对数据的有效管理和更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create table #temp
(
  id 
int identity(1,1),
  zise 
nvarchar(200)
)
declare @zise nvarchar(200)
declare @n        int
declare @rows     int
select @n=1
insert #temp(zise) select prosize  from tt
select @rows = @@rowcount
while @n <= @rows
begin
select @zise = prosize 
from tt
     
where prosize=(select zise from #temp where id = @n)

-- 对字段里面不规则空格进行化为一个空格
set @zise=ltrim(@zise)
set @zise=rtrim(@zise)
    
while charindex('  ',@zise)<>0
         
begin
            
set @zise=replace(@zise,'  ',' ')
        
end
--insert into #temp(zise) values (@zise) --原临时表追加插入
update #temp set zise=@zise where id=@n  --更新
--print(@zise)  
select @n = @n + 1
end
select * from #temp
drop TABLE #temp

/*
结果:
44    1975*990*110            1740*1010*100
45    1975*990*110            1740*1010*100
46    1975*990*110            1740*1010*100
47    1010*920*190           1940*1010*110
48    1010*920*190           1940*1010*110
****
变成:
27    1010*920*190 1940*1010*110
28    1010*920*190 1940*1010*110
29    1010*920*190 1940*1010*110
30    1010*920*190 1940*1010*110
*/


/*
字段(size):
1    aa
2    bb cc
*/

--可以通过 因为 bb cc 之间有空格
select LEFT(zise,CHARINDEX(' ',zise)-1AS A from #temp where id =2 

select LEFT(zise,CHARINDEX(' ',zise)-1AS A from #temp 
--传递到 SUBSTRING 函数的长度参数无效。因为有些行没有空格 如第一行

--解决:

--取第一个
select LEFT(zise,CHARINDEX(' ',zise+' ')-1AS A from #temp 
--取第二个 中间不规则空格
select ltrim(rtrim(substring(zise,CHARINDEX(' ',zise+' '),len(zise+' ')-CHARINDEX(' ',zise)+1))) as A from #temp

select substring(zise,CHARINDEX(' ',zise+' '),len(zise+' ')-CHARINDEX(' ',zise)+1as A from #temp





--临时表 + While循环  对列进行遍历
create table #temp
(
  id 
int identity(1,1),
  zise 
nvarchar(50)
)
declare @zise nvarchar(50)
declare @n        int
declare @rows     int
select @n=1
insert #temp(zise) select prosize  from tt
select @rows = @@rowcount
while @n <= @rows
begin
select @zise = prosize 
from tt
     
where prosize=(select zise from #temp where id = @n)
print(@zise
select @n = @n + 1
end
drop TABLE #temp
/*
结果:
(169 行受影响)
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
.
*/




--游标(Cursor) + While循环 对列进行遍历

declare @size nvarchar(50)
declare pcurr cursor for
select prosize  from tt
open pcurr
fetch next from pcurr into @size
while (@@fetch_status = 0)
begin
 
print (@size)
 
fetch next from pcurr into @size
end
close pcurr
deallocate pcurr 

/*
结果:
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
.
*/

转载于:https://www.cnblogs.com/zengxiangzhan/archive/2009/11/05/1596486.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值