效果图:
近期工作中,有个如上图效果的需求:将一个字段里面的值,以“,"切割成多列
通过思考、搜索,在网上找到了博主Microshaoft的文章:
妙用 T-SQL: PARSENAME 函数 (也可不使用该函数,鸣谢"小杰") 实现按指定分隔符拆分字符串 SplitString
原帖地址:http://www.cnblogs.com/Microshaoft/archive/2005/05/10/152325.html
在此,感谢博主及为此付出的朋友!
下面,创库、表、测试数据学习下。
create database TestDB go use TestDB go create table TestDB.dbo.testTab( tId bigint identity(1,1) NOT NULL, tField nvarchar(100) null ) go insert into TestDB.dbo.testTab values('仙桃西-汉口,武汉-仙桃西') insert into TestDB.dbo.testTab values('上海-仙桃西') insert into TestDB.dbo.testTab values('北京-上海-深圳,北京-武汉,深圳-上海-北京,武汉-北京') insert into TestDB.dbo.testTab values('上海-北京,上海-武汉-重庆,北京-上海,重庆-武汉-上海') insert into TestDB.dbo.testTab values('杭州-上海-北京,西藏-武汉,武汉-西藏,武汉-成都') insert into TestDB.dbo.testTab values('成都-北京-哈尔滨,哈尔滨-北京,杭州-上海,广州-武汉,成都-上海,上海-武汉') select * from TestDB.dbo.testTab
--创建函数 use TestDB go create function dbo.SplitSubString ( @Expression varchar(8000) ,@Delimiter varchar(100) ,@ int ) returns varchar(8000) as begin declare @p int set @p = CharIndex(@Delimiter,@Expression) if @p > 0 begin set @p = @p + len(@Delimiter) - 1 end declare @i int set @i = 1 while @i < @ begin set @i = @i + 1 set @Expression = substring (@Expression, @p + 1,len(@Expression) - @p ) set @p = CharIndex(@Delimiter,@Expression) if @p > 0 begin set @p = @p + len(@Delimiter) - 1 end else begin break end end declare @s varchar(1000) if @p = 0 and @i = @ begin set @s = @Expression end else if @i = @ begin set @s = substring(@Expression, 1,@p - len(@Delimiter)) end return @s end GO
--查询 select tField ,TestDB.dbo.SplitSubString(tField,',',1) as tField1 ,TestDB.dbo.SplitSubString(tField,',',2) as tField2 ,TestDB.dbo.SplitSubString(tField,',',3) as tField3 ,TestDB.dbo.SplitSubString(tField,',',4) as tField4 ,TestDB.dbo.SplitSubString(tField,',',5) as tField5 ,TestDB.dbo.SplitSubString(tField,',',6) as tField6 from TestDB.dbo.testTab
函数说明:dbo.SplitSubString(字段名,分隔符,第几段)
有问题,留言讨论,谢谢!