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
Lepaskan: 2025-01-05 10:31:49
asal
650 orang telah melayarinya

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
Salin selepas log masuk

Ke dalam format yang diingini:

Code  Declaration 
123   a1 - 2nos 
123   a2 - 230nos 
123   a3 - 5nos
Salin selepas log masuk

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;
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan