数据库难题对话

来源:互联网 发布:windows live id是什么 编辑:程序博客网 时间:2024/05/12 10:28

 交谈中请勿轻信汇款、中奖信息,勿轻易拨打陌生电话。

河北*无忧(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
我还没消化呢。再想想。