zoukankan      html  css  js  c++  java
  • 在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(字段名,分隔符,第几段)

    有问题,留言讨论,谢谢!

  • 相关阅读:
    大数据面经
    mysql复习(2)
    java容器
    内存管理
    垃圾收集
    输入/输出流
    排序算法的稳定性及其汇总
    java传值与传引用
    linux复习6
    linux复习5
  • 原文地址:https://www.cnblogs.com/gilbert/p/5316388.html
Copyright © 2011-2022 走看看