微软BI开拓者

首页 » 数据库专区 » SQL Server开发 » 寻求循环读取字段里面的值
ygjn_2000 - 3/13/2008 8:42:00 AM
有什么方法能读出下面的字符吗?
301\302\303\304\306\307\308\309\310\311\312\313\314\315\316\317\318\319\320\321\322\323\324\325\326\327\328\329\330\331\332\333\334\335\336\337\338\339\340\341\342\343\344\345\368\369\370\371\372\877\380\888\899\
需要把以上字符串转换为去\之后的字符串。还能不能一次读取所有数据,并3位为一个。
比如:
301
302
303
304
306
307
.....

declare @ssyfd int,@len int
select @ssyfd = max(len(ssyfd)) from t_spcxd
set @len = 3
while @len < @ssyfd
begin
    select substring(ssyfd,charindex('\',ssyfd,@len)+1,3) from t_spcxd
end
如果在查询后面加where的话,可以读取,但如果是全表扫描,则读取不出来。我想是@ssyfd这个变量赋值有问题,但不知道怎么去取。
拓狼 - 3/13/2008 9:25:00 AM
declare @d varchar(max)
set @d='301\302\303\304\306\307\308\309\310\311\312\313\314\315\316\317\318\319\320\321\322\323\324\325\326\327\328\329\330\331\332\333\334\335\336\337\338\339\340\341\342\343\344\345\368\369\370\371\372\877\380\888\899\'
set @d='select '+replace(@d,'\',' union all select ')
set @d=left(@d,len(@d)-17)
exec(@d)
maxjft0228 - 3/31/2008 3:00:00 PM
楼上的答案,:default6: 赞一个
chenjing957 - 4/2/2008 8:28:00 AM
狼,有没有遇到过执行类似exec(@d) 的时候,如果@d字符串很长的话,运行速度会很慢??
汪兴元 - 8/17/2010 9:17:00 PM
declare @d varchar(max)
set @d='301\302\303\304\306\307\308\309\310\311\312\313\314\315\316\317\318\319\320\321\322\323\324\325\326\327\328\329\330\331\332\333\334\335\336\337\338\339\340\341\342\343\344\345\368\369\370\371\372\877\380\888\899\'
select @d=replace(@d,'\','')

select substring(@d,Nom*3-2,3) as Num from
(
        select top (len(@d)/3)row_number() over(order by id ) as Nom
        from sysobjects
) as A
自己刚学习 sql 算便 逛逛 大家多提意见
1
查看完整版本: 寻求循环读取字段里面的值