当前位置: 代码迷 >> Sql Server >> 怎么把一个字段,分成几个字段
  详细解决方案

怎么把一个字段,分成几个字段

热度:8   发布时间:2016-04-24 10:23:35.0
如何把一个字段,分成几个字段
列test中数据格式为
 testa----test1----劳而无----fadfad----dfad
 testb----test2----fadfa----dfasdfa----dfad
 testc----test3----dfadfa----fasdfasd----dfadf



每行数据 都有分割符号---- 。
现在想将test里的数据分割到  a ,b,c,d,e 列中。
如下图所示:
a                 b            c                d              e 
testa       test1       劳而无     fadfad       dfad
testb       test2       fadfa         fadfa        dfad
testc       test3       dfadfa      fasdfasd   dfadf

------解决方案--------------------
http://biancheng.dnbcw.info/mssql/164383.html

  希望能帮到你
------解决方案--------------------
http://www.cnblogs.com/zfanlong1314/archive/2013/01/14/2859848.html
------解决方案--------------------
字符 串拆分。。substring .charindex stuff 各种函数组合
------解决方案--------------------
用PARSENAME函数拆分字符串
供参考!
------解决方案--------------------
试了一下邹老大的的确方便,另外Parsename上限是处理4列
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(發糞塗牆)
-- Date    :2014-07-08 07:53:44
-- Version:
--      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
-- May 14 2014 18:34:29 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([test] varchar(45))
insert [huang]
select 'testa----test1----劳而无----fadfad----dfad' union all
select 'testb----test2----fadfa----dfasdfa----dfad' union all
select 'testc----test3----dfadfa----fasdfasd----dfadf'
--------------开始查询--------------------------
IF NOT OBJECT_ID('f_GetStr') IS NULL
    DROP FUNCTION [f_GetStr]
GO
--分段截取函数(邹建)
CREATE FUNCTION dbo.f_GetStr(
    @s varchar(8000),      --包含多个数据项的字符串
    @pos int,             --要获取的数据项的位置
    @split varchar(10)     --数据分隔符
)RETURNS varchar(1000)
AS
BEGIN
    IF @s IS NULL RETURN(NULL)
    DECLARE @splitlen int
    SELECT @splitlen=LEN(@split+'a')-2
    WHILE @pos>1 AND CHARINDEX(@split,@s+@split)>0
        SELECT @pos=@pos-1,
            @s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen,'')
    RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),''))
END
GO

SELECT 
    dbo.f_GetStr(test,1,'----') A,
    dbo.f_GetStr(test,2,'----') B,
    dbo.f_GetStr(test,3,'----') C,
    dbo.f_GetStr(test,4,'----') D,
    dbo.f_GetStr(test,5,'----') E
    FROM huang

----------------结果----------------------------
/* 
A                                                                                                                                                                                                                                                                B                                                                                                                                                                                                                                                                C                                                                                                                                                                                                                                                                D                                                                                                                                                                                                                                                                E
  相关解决方案