Ipotizziamo di avere una tabella così composta:
TABELLA DI PARTENZA : TB_NOME_CARATTERISTICHE
ID |NOME |CARATTERISTICHE
1 |LUCA |OCCHI BLU;CAPELLI NERI;ALTO 1,74cm;PESO 80kg
Vogliamo dividere le CARATTERISTICHE in colonne separate:
TABELLA FINALE : TB_NOME_CARATTERISTICHE_SEPARATE
ID |NOME |CARAT_1 |CARAT_2 |CARAT_3 |CARAT_4
1 |LUCA |OCCHI BLU |CAPELLI NERI |ALTO 1,74cm |PESO 80kg
Per poterlo fare andiamo a spezzare in colonne diverse il dato presente nella colonna CARATTERISTICHE usando il ; come nostro separatore:
QUERY :
SELECT DISTINCT d.ID,d.NOME
,S.a.value('(/H/r)[1]', 'VARCHAR(100)') AS CARAT_1
,S.a.value('(/H/r)[2]', 'VARCHAR(100)') AS CARAT_2
,S.a.value('(/H/r)[3]', 'VARCHAR(100)') AS CARAT_3
,S.a.value('(/H/r)[4]', 'VARCHAR(100)') AS CARAT_4
FROM (SELECT *, CAST (N'<H><r>' + REPLACE (TB_NOME_CARATTERISTICHE.CARATTERISTICHE, ';', '</r><r>') + '</r></H>' AS XML) AS [vals] FROM TB_NOME_CARATTERISTICHE) d CROSS APPLY d.[vals].nodes('/H/r') S(a);
Buon Web a tutti