在SqlServer2008R2中,根据分隔符把一列的值切割成多列
Posted 陈哲Gilbert
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SqlServer2008R2中,根据分隔符把一列的值切割成多列相关的知识,希望对你有一定的参考价值。
近期工作中,有个如上图效果的需求:将一个字段里面的值,以“,"切割成多列
通过思考、搜索,在网上找到了博主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(字段名,分隔符,第几段)
有问题,留言讨论,谢谢!
以上是关于在SqlServer2008R2中,根据分隔符把一列的值切割成多列的主要内容,如果未能解决你的问题,请参考以下文章
根据 SQL Server 2008R2 中表中的列获取计数
实体框架中 SqlClient 的 SqlServer 2008R2 连接问题