在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 连接问题

SqlServer2008R2自动删除备份

记录安装SQLServer2008R2的坑

sqlserver2008r2 链接服务器到oracle 11g

不允许修改SQLserver2008r2表中字段的属性问题