sql server2000中怎么将一个字符串分割成多个字段??急,在线等
时间:2011-12-27
来源:互联网
怎样将之以|分割成字段,|线不要
作者: huyou_ni 发布时间: 2011-12-27
use tempdb go --测试数据 declare @s varchar(1000) set @s='ak47,mp5,1,23' /*要求输出结果 S ---- ak47 mp5 1 23 */ --3种方法对比: --1.[朴实]动态Exec方法: declare @s1 varchar(1000) set @s1=right(replace(','+@s,',',''' as S union select '''),len(replace(','+@s,',',''' as S union select '''))-12)+'''' exec(@s1) --2.[变通]表交叉方法: select replace(reverse((left(s,charindex(',',s)))),',','') as S from( select r,reverse(left(@s,r))+',' as s from( select (select count(*) from sysobjects where name<=t.name ) as r from sysobjects t )a where r<=len(@s) and left(@s+',',r+1) like '%,' )t order by r --3.[高级]XML方法: DECLARE @idoc int; DECLARE @doc xml; set @doc=cast('<Root><item><S>'+replace(@s,',','</S></item><item><S>')+'</S></item></Root>' as xml) EXEC sp_xml_preparedocument @Idoc OUTPUT, @doc SELECT * FROM OPENXML (@Idoc, '/Root/item',2) WITH ( [S] varchar(10) )
作者: fredrickhu 发布时间: 2011-12-27
declare @s varchar(1000) set @s='aasd|asd|dsfsdf|asd|asdasf|asfaf|asf' select col=convert(varchar(10),left(@s,charindex('|',@s)-1)) into # set @s=right(@s,len(@s)-charindex('|',@s))+'|' while len(@s)>1 begin insert into # select convert(varchar(10),left(@s,charindex('|',@s)-1)) set @s=right(@s,len(@s)-charindex('|',@s)) end select * from # /* col ---------- asd dsfsdf asd asdasf asfaf asf aasd (7 行受影响) */ go drop table #
作者: qianjin036a 发布时间: 2011-12-27
create function [dbo].[m_split](@c varchar(2000),@split varchar(2)) returns @t table(col varchar(200)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) set @c = stuff(@c,1,charindex(@split,@c),'') end insert @t(col) values (@c) return end select * from dbo.m_split('aasd|asd|dsfsdf|asd|asdasf|asfaf|asf','|') /* col ------------- aasd asd dsfsdf asd asdasf asfaf asf */
作者: maco_wang 发布时间: 2011-12-27
作者: huyou_ni 发布时间: 2011-12-27

作者: Super_Ninja 发布时间: 2011-12-27
请问怎么实现 谢谢了
作者: huyou_ni 发布时间: 2011-12-27
作者: kuqideyupian 发布时间: 2011-12-27
SQL code
create table tb(id int,col varchar(20)) insert into tb select 1,'aa,bb' insert into tb select 2,'aaa,bbb,ccc' go SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b SELECT A.id, SUBSTRING(A.[col], B.id, CHARINDEX(',', A.[col] + ',', B.id) - B.id) col FROM tb A, # B WHERE SUBSTRING(',' + A.[col], B.id, 1) = ',' /* id col ----------- -------------------- 1 aa 1 bb 2 aaa 2 bbb 2 ccc (5 行受影响) */ go DROP TABLE tb,#
作者: qianjin036a 发布时间: 2011-12-27
CREATE TABLE #temp ( id int, test varchar(200) ) INSERT INTO #temp(id,test)VALUES(1,'aasd|asd|dsfsdf|asd|asdasf|asfaf|') SELECT id,test,n,SUBSTRING(test,n,charindex('|',test,n)-n) AS newtest FROM #temp AS t LEFT JOIN nums ON n<=len(test) AND substring('|' + test,n,1)='|'
其中nums表是一个字典表,就是只有一个字段,n 里面是1,2,3,4,5,6这样的数值
作者: chenguang79 发布时间: 2011-12-27
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28