首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中分隔字段并从该字段创建单独的行?

如何在SQL中分隔字段并从该字段创建单独的行?
EN

Stack Overflow用户
提问于 2015-07-20 13:30:23
回答 2查看 69关注 0票数 0

我在Server中有一个字段,它有时可以包含由管道分隔的文本,如下所示:

代码语言:javascript
复制
COLOUR
Red
Blue|Red|Yellow
Green|White
Yellow

我想要创造这个:

代码语言:javascript
复制
COLOUR          SUBCOLOUR
Red             Red
Blue|Red|Yellow Blue
Blue|Red|Yellow Red
Blue|Red|Yellow Yellow
Green|White     Green
Green|White     White
Yellow          Yellow

有人有什么想法吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-20 15:46:19

通过使用拆分函数,我们可以实现所需的结果集。

代码语言:javascript
复制
 declare @t table (Colour  varchar(50))
    insert into @t (Colour)
    values 
    ('Red'),
    ('Blue|Red|Yellow'),
    ('Green|White'),
    ('Yellow')



 ;with cte as (
    SELECT  Colour As Colour ,
         Split.a.value('.', 'VARCHAR(100)') AS SubColour  
     FROM  (SELECT Colour,
             CAST ('<M>' + REPLACE([Colour], '|', '</M><M>') + '</M>' AS XML) AS String  
         FROM  @t) AS A CROSS APPLY String.nodes ('/M') AS Split(a))

         select * from cte 
票数 1
EN

Stack Overflow用户

发布于 2015-07-20 15:00:41

未经测试,但有评论。使用变量和游标,所以只有当这不是一个大表并且您只做一次时才会推荐。如果这对你不起作用,我很乐意提供更多的解释:

代码语言:javascript
复制
CREATE TABLE NewTable (Colour varchar(50),SubColour varchar(50))   

SELECT Colour, LEN(Colour) - LEN(REPLACE(Colour,'|','')) AS delimCount
INTO #temp FROM [ColourTable]

DECLARE @i int
DECLARE @delimLoc int
DECLARE @Colour varchar(50)
DECLARE @subColour varchar(50)
DECLARE ColourCursor CURSOR FOR SELECT * FROM #temp;
OPEN ColourCursor;

一排排地穿过桌子

代码语言:javascript
复制
WHILE @@FETCH_STATUS = 0
BEGIN

FETCH NEXT FROM ColourCursor INTO @Colour;
SET @i = 1
SET @delimLoc = 0
IF delimCount > 0

BEGIN
WHILE @i <= delimCount

循环创建一个子颜色,该子颜色来自上一次使用的“AC.26”(或颜色字段的开头,如果@i = 1)。

代码语言:javascript
复制
BEGIN
SET @subColour = SUBSTRING(@Colour,@delimLoc+1,CHARINDEX(@Colour,'|',@delimLoc+1))
INSERT INTO NewTable VALUES (@Colour,@subColour)
SET @i = @i + 1
SET @delimLoc = @delimLoc + CHARINDEX(@Colour,'|',@delimLoc+1)
END

END

END

CLOSE ColourCursor
DEALLOCATE ColourCursor;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31517843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档