交谈中请勿轻信汇款、中奖信息,勿轻易拨打陌生电话。
河北*无忧(917601252) 11:42:42
请教在SQL 2000中实现
有表tb, 如下:
id values
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
3 ddab,abc,a
4 a
欲按,分拆values列, 分拆后结果如下:
id value
----------- --------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
3 ddab
3 abc
3 a
4 a
哪位高手帮帮忙啊
长春银狐(隐身)(4775457) 11:44:14
那天不是解决了吗。
上海-飞飞(329753774) 11:44:33
银狐好强的
长春银狐(隐身)(4775457) 11:44:59
select b.id,name=substring(b.[name], a.number, charindex(',', b.[name] + ',', a.number) - a.number)
from master..spt_values a,tb b
where type='p'
and substring(',' + b.[name], a.number,1) = ','
长春银狐(隐身)(4775457) 11:45:30
呵呵,我也是菜鸟。。。
上海-飞飞(329753774) 11:45:39
比我强
河北*无忧(917601252) 11:46:06
真是谢谢。
好我试试。
长春银狐(隐身)(4775457) 11:46:16
河北*无忧
把我给你的语句改一下。就可以了。
河北*无忧(917601252) 11:46:51
能解释下吗?我不太明白。
长春银狐(隐身)(4775457) 11:47:29
就是用substring来按逗号分隔来取相应的字符串。
长春银狐(隐身)(4775457) 11:48:07
内联的那个存储过程是用来按段来算的。
长春银狐(隐身)(4775457) 11:48:13
我说的有点乱。。
河北*无忧(917601252) 11:48:29
charindex(',', b.[name] + ',', a.number) - a.number)
为什么要减a.number
河北*无忧(917601252) 11:49:20
没事,给我说就好了,我真的不明白。
长春银狐(隐身)(4775457) 11:49:31
charindex(',','aaa,bbb,ccc,',a.number)
长春银狐(隐身)(4775457) 11:49:39
拿这句做例子。
河北*无忧(917601252) 11:49:57
还有where 后面的句子,就更是不懂了。
河北*无忧(917601252) 11:50:13
好的。您说。
北京-望月神(64701333) 11:50:30
你搞懂几个函数就行了
北京-望月神(64701333) 11:50:45
一个是charindex,一个是substring
河北*无忧(917601252) 11:51:07
我明白 ,但是组在一起我就不明白了。
长春银狐(隐身)(4775457) 11:52:02
从a.number的位置查找逗号,然后用substring来取值。
长春银狐(隐身)(4775457) 11:52:40
where条件就是看串里是否还有逗号
北京-望月神(64701333) 11:52:59
substring(b.[name], a.number, charindex(',', b.[name] + ',', a.number) - a.number)
这句就是用charindex取长度,然后根据这个长度截取字符串作为name的值
长春银狐(隐身)(4775457) 11:53:20
嗯。解释的很清楚。比我说的明白。。
长春银狐(隐身)(4775457) 11:55:32
declare @str as varchar(30),@n as int
set @str='aaa,b,ccc,dd'
set @n=1
while(@n<20)
begin
print substring(@str,@n,charindex(',',@str+',',@n)-@n
end
长春银狐(隐身)(4775457) 11:55:51
用段运行一下就看出效果了。
长春银狐(隐身)(4775457) 11:56:39
刚才有问题。用这句:
declare @str as varchar(30),@n as int
set @str='aaa,b,ccc,dd'
set @n=1
while(@n<20)
begin
print substring(@str,@n,charindex(',',@str+',',@n)-@n)
set @n=@n+1
end
长春银狐(隐身)(4775457) 11:57:46
declare @str as varchar(30),@n as int
set @str='aaa,b,ccc,dd'
set @n=1
while(@n<20)
begin
print substring(@str,@n,charindex(',',@str+',',@n)-@n+1)
set @n=@n+1
end
这句更明确一些。
长春银狐(隐身)(4775457) 11:57:57
aaa,
aa,
a,
,
b,
,
ccc,
cc,
c,
,
dd
d
这个是结果。
长春银狐(隐身)(4775457) 11:58:11
还有人在听吗?没人就不说了。。。
河北*无忧(917601252) 11:58:18
在。
河北*无忧(917601252) 11:58:34
我都跟不上你们的速度。
长春银狐(隐身)(4775457) 11:58:49
哦?说快了?
河北*无忧(917601252) 11:58:52
太厉害了。
长春银狐(隐身)(4775457) 11:59:10
望月神厉害。。。
河北*无忧(917601252) 11:59:33
我还没消化呢。再想想。
长
数据库难题对话
最新推荐文章于 2022-10-23 00:05:26 发布