30 Mart 2011, ÇARŞAMBA
Tek satır içine Virgülle Ayrılmış bir dize dönüm
Böyle bir SQL Tablosu var:
| SomeID | OtherID | Data
---------------- ------------- -------------------
| abcdef-..... | cdef123-... | 18,20,22
| abcdef-..... | 4554a24-... | 17,19
| 987654-..... | 12324a2-... | 13,19,20
tek tek satır döndüren SELECT OtherID, SplitData WHERE SomeID = 'abcdef-.......'
gibi bir sorgu, bu şekilde gerçekleştirmek nerede, orada bir sorgu
| OtherID | SplitData
------------- -------------------
| cdef123-... | 18
| cdef123-... | 20
| cdef123-... | 22
| 4554a24-... | 17
| 4554a24-... | 19
Temelde tek tek satırlara virgül verilerimi split?
İlişkisel bir veritabanı içine virgülle ayrılmış bir dize saklamak aptalca geliyor biliyorum, ama tüketici bu uygulamanın normal kullanma durumu gerçekten yararlı hale getirir.
Disk belleği ihtiyacım var uygulama olarak split yapmak istemiyorum, tüm app yeniden düzenleme önce seçeneklerini keşfetmek istedim.
SQL Server 2008 (R2 olmayan).
CEVAP
30 Mart 2011, ÇARŞAMBA
SQL Server harika özyinelemeli işlevleri kullanabilirsiniz
Örnek tablo
create table Testdata(SomeID int, OtherID int, Data varchar(max))
insert Testdata select 1, 9, '18,20,22'
insert Testdata select 2, 8, '17,19'
insert Testdata select 3, 7, '13,19,20'
insert Testdata select 4, 6, ''
Sorgu
;with tmp(SomeID, OtherID, DataItem, Data) as (
select SomeID, OtherID, LEFT(Data, CHARINDEX(',',Data ',')-1),
STUFF(Data, 1, CHARINDEX(',',Data ','), '')
from Testdata
union all
select SomeID, OtherID, LEFT(Data, CHARINDEX(',',Data ',')-1),
STUFF(Data, 1, CHARINDEX(',',Data ','), '')
from tmp
where Data > ''
)
select SomeID, OtherID, DataItem
from tmp
order by SomeID
-- OPTION (maxrecursion 0)
-- normally recursion is limited to 100. If you know you have very long
-- strings, uncomment the option
Çıktı
SomeID OtherID DataItem
1 9 18
1 9 20
1 9 22
2 8 17
2 8 19
3 7 13
3 7 19
3 7 20
4 6
9 11 1
9 11 2
9 11 3
9 11 4
etc.
Bunu Paylaş:
Nasıl bir Liste içine virgülle ayrılmı...
Güvenli bir nesne içine bir JSON dize ...
IList virgülle ayrılmış listesi oluştu...
Dizi virgülle ayrılmış dize dönüştürme...
Nasıl bir virgülle ayrılmış Dize Için ...