Il modo migliore per imparare qualcosa è rivisitare alcuni dei vecchi blog e poi cercare di trovare un modo più efficiente per lavorare sullo stesso problema. Recentemente stavo guardando i forum per trovare una domanda che si ripresenta continuamente intorno alla creazione di una lista separata da virgole. Questo non è nuovo su questo blog e se cercate ne otterrete pochi. Molto tempo fa ho scritto sotto il blog per mostrare i valori memorizzati nella tabella come elenco separato da virgole – questo non è un rimaneggiamento di ciò che è stato scritto prima ma un modo più nuovo per risolvere il problema di nuovo.

QL SERVER – Creazione di un elenco di valori separati da virgola da una tabella – UDF – SP
SQL SERVER – Valori separati da virgola (CSV) da una colonna della tabella

Di recente qualcuno mi ha chiesto di fare il contrario. Stavano memorizzando valori separati da virgola in una colonna di tabella. Questa tabella veniva popolata da qualche fonte tramite il pacchetto SSIS. Ecco la versione semplificata del problema che mi è stato presentato.

DECLARE @t TABLE(EmployeeID INT,Certs VARCHAR(8000))INSERT @t VALUES (1,'B.E.,MCA, MCDBA, PGDCA'), (2,'M.Com.,B.Sc.'), (3,'M.Sc.,M.Tech.')

Questo è l’aspetto dei dati nella tabella.

SQL SERVER - Split Comma Separated List Without Using a Function csv-split-01

SQL SERVER - Split Comma Separated List Without Using a Function csv-split-01

Con i dati di cui sopra disponibili, vogliono dividerli in valori individuali. Cercando possibili soluzioni, ecco la query di soluzione che ho trovato:

SELECT EmployeeID,LTRIM(RTRIM(m.n.value('.','varchar(8000)'))) AS CertsFROM(SELECT EmployeeID,CAST('<XMLRoot><RowData>' + REPLACE(Certs,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS xFROM @t)tCROSS APPLY x.nodes('/XMLRoot/RowData')m(n)


L’output appare come segue.

SQL SERVER - Dividere liste separate da virgole senza usare una funzione csv-split-02

SQL SERVER - Split Comma Separated List Without Using a Function csv-split-02

Spero che questo ti aiuti nel tuo progetto. Fammi sapere se sei in grado di trovare una soluzione diversa allo stesso problema. Il modo migliore per imparare è imparare gli uni dagli altri.

Categorie: Articles

0 commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *