首页 > 数据库 > mysql教程 > 如何在 SQL 中将逗号分隔的列数据转换为不同的行?

如何在 SQL 中将逗号分隔的列数据转换为不同的行?

Patricia Arquette
发布: 2025-01-05 10:31:49
原创
621 人浏览过

How to Transform Comma-Separated Column Data into Distinct Rows in SQL?

在 SQL 中从拆分列数据中提取行数据

要将列数据拆分为不同的行,您可以利用自定义函数并应用它使用外连接连接到现有表。这使您能够像这样转换数据:

Code  Declaration
123   a1-2 nos, a2- 230 nos, a3 - 5nos
登录后复制

转换为所需的格式:

Code  Declaration 
123   a1 - 2nos 
123   a2 - 230nos 
123   a3 - 5nos
登录后复制

使用拆分函数

创建一个split 函数称为 [dbo].[Split],使用“,”分隔数据分隔符:

create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))       
returns @temptable TABLE (items varchar(MAX))       
as       
begin      
    declare @idx int       
    declare @slice varchar(8000)       

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)       

        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return 
end;
登录后复制

应用拆分函数

在查询中使用拆分函数将新表连接到原始表:

select t1.code, s.items declaration
from yourtable t1
outer apply dbo.split(t1.declaration, ',') s
登录后复制

这将产生所需的输出。

使用CTE

或者,您可以实现 CTE(公共表表达式)版本:

;with cte (code, DeclarationItem, Declaration) as
(
  select Code,
    cast(left(Declaration, charindex(',',Declaration+',')-1) as varchar(50)) DeclarationItem,
         stuff(Declaration, 1, charindex(',',Declaration+','), '') Declaration
  from yourtable
  union all
  select code,
    cast(left(Declaration, charindex(',',Declaration+',')-1) as varchar(50)) DeclarationItem,
    stuff(Declaration, 1, charindex(',',Declaration+','), '') Declaration
  from cte
  where Declaration > ''
) 
select code, DeclarationItem
from cte
登录后复制

以上是如何在 SQL 中将逗号分隔的列数据转换为不同的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板