Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Data Lajur Dipisahkan Koma ke Baris Berbeza dalam SQL?

Bagaimana untuk Mengubah Data Lajur Dipisahkan Koma ke Baris Berbeza dalam SQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 10:31:49710semak imbas

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

Mengekstrak Data Baris daripada Data Lajur Pisah dalam SQL

Untuk memisahkan data lajur kepada baris yang berbeza, anda boleh memanfaatkan fungsi tersuai dan menggunakannya ke jadual sedia ada anda menggunakan sambung luar. Ini membolehkan anda mengubah data seperti ini:

Code  Declaration
123   a1-2 nos, a2- 230 nos, a3 - 5nos

Ke dalam format yang diingini:

Code  Declaration 
123   a1 - 2nos 
123   a2 - 230nos 
123   a3 - 5nos

Menggunakan Fungsi Split

Buat fungsi split dipanggil [dbo].[Split] untuk memisahkan data menggunakan ',' pembatas:

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;

Menggunakan Fungsi Split

Gunakan fungsi pisah dalam pertanyaan untuk menyertai jadual baharu kepada yang asal:

select t1.code, s.items declaration
from yourtable t1
outer apply dbo.split(t1.declaration, ',') s

Ini akan menghasilkan output yang diingini.

Menggunakan CTE

Sebagai alternatif, anda boleh melaksanakan versi CTE (Common Table Expression):

;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

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Lajur Dipisahkan Koma ke Baris Berbeza dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn