Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Nilai Dipisahkan Koma dalam Lajur SQL kepada Baris Berasingan?
Masalah:
Anda mempunyai jadual dengan dua lajur, Kod dan Pengisytiharan. Lajur Pengisytiharan mengandungi senarai nilai yang dipisahkan koma. Anda perlu menukar data ini kepada baris, dengan setiap baris mewakili pengisytiharan berasingan untuk kod yang sepadan.
Penyelesaian:
Satu pendekatan untuk menangani isu ini melibatkan mewujudkan fungsi SQL tersuai:
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;
Anda kemudian boleh memanfaatkan fungsi ini dalam pertanyaan menggunakan aplikasi luar untuk menyambung ke sedia ada anda jadual:
select t1.code, s.items declaration from yourtable t1 outer apply dbo.split(t1.declaration, ',') s
Pertanyaan ini akan menghasilkan hasil yang diingini:
| CODE | DECLARATION | ----------------------- | 123 | a1-2 nos | | 123 | a2- 230 nos | | 123 | a3 - 5nos |
Sebagai alternatif, anda boleh menggunakan versi CTE (Common Table Expression), yang beroperasi secara serupa:
;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 Nilai Dipisahkan Koma dalam Lajur SQL kepada Baris Berasingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!