首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

单表转换有关问题有答案,求解释

2013-12-11 
单表转换问题有答案,求解释!之前有人在论坛上问题过这样一个问题。Begin trydroptable #testEnd tryBegin C

单表转换问题有答案,求解释!
单表转换有关问题有答案,求解释
之前有人在论坛上问题过这样一个问题。


Begin try
drop  table #test
End try
Begin Catch
print '不存在#test'
End Catch

CREATE TABLE #test
(
ID UNIQUEIDENTIFIER,
NAME NVARCHAR(max),
SORTNO int
)

INSERT INTO #test
        ( ID, NAME, SORTNO )
VALUES  ( NEWID(), -- ID - uniqueidentifier
          N'aa,bb,cc,dd349', -- NAME - nvarchar(50)
          1  -- SORTNO - int
          )
INSERT INTO #test
        ( ID, NAME, SORTNO )
VALUES  ( NEWID(), -- ID - uniqueidentifier
          N'qqq,www,eee', -- NAME - nvarchar(50)
          3  -- SORTNO - int
          )   
go
select * from #test  ---原表

go

select id, 
       --name转换后的表,
       SUBSTRING(t.name, number ,CHARINDEX(',',t.name+',',number)-number) as name,
       SORTNO
from #test t,master..spt_values s
where s.number >=1
and s.type = 'P'
and SUBSTRING(','+t.name,s.number,1) = ','


go


上面答案是有了。但是有个地方我想了好久,就是不理解,求解释。

select number from master..spt_values s where s.number >=1 ---系统数字列 1---2047
and s.type = 'P'
select CHARINDEX (',',name,0) from #test    ---获取第一个 逗号位置
select SUBSTRING (name,0, CHARINDEX (',',name,0)) from #test  ---获取第一个逗号前面的值

select CHARINDEX (',',name,CHARINDEX (',',name,0)+1) from #test     ---获取第二个 逗号位置
select CHARINDEX (',',name,CHARINDEX (',',name,CHARINDEX (',',name,0)+1)+1) from #test     ---获取第三个 逗号位置
                                                                                                
                                                                                                ---获取第n个 逗号位置怎么写?
                                                                                                
                                                                                                

                                                                                                


 SUBSTRING(t.name, number ,CHARINDEX(',',t.name+',',number)-number) as name  --这一句 substring 函数我会用,但这一句我不理解,求解释?


[解决办法]
你可以拆来看看,比如使用select CHARINDEX(',',t.name+',',number)-number from #test,看看是什么结果,读代码很重要就是看结果
[解决办法]

SUBSTRING(t.name, number ,CHARINDEX(',',t.name+',',number)-number) as name

对于这一句中的number是表master..spt_values中的一个字段,在substring
函数中,表示从这个位开始,CHARINDEX(',',t.name+',',number)--这句就是从t.name的地number个字符开始
','所处的位数,后面的-number你应该该明白了吧

热点排行