Usando SSIS o T-SQL, divida una columna de valores separados por comas, ya sean entrecomillados o sin entrecomillar, en varias columnas.
Tengo datos separados por comas en una columna llamada C0. Los datos en C0 se ven así:
C0 |
---|
“Pacey LLC.”,213830ZZ,11/1/2017,11/1/2017,”297,311.74″,”2,371.40″,0.00,”1,325.18″,0.00,42.22,”123,986.56″ |
Mike The Miker,9814140VCD,12/1/2018,12/1/2018,”3,917,751.99″,”419,743.54″,”36,642.66″,”344,090.43″,0.00,10.00,”2,434,671.06″ |
Y quiero que termine así:
F1 | F1 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
---|---|---|---|---|---|---|---|---|---|---|
“Pacey LLC.” | 213830ZZ | 11/1/2017 | 11/1/2017 | 297,311.74 | 2,371.40 | 0.00 | 1,325.18 | 0.00 | 42.22 | 123,986.56 |
Mike The Miker | 9814140VCD | 12/1/2018 | 12/1/2018 | 3,917,751.99 | 419,743.54 | 36,642.66 | 344,090.43 | 0.00 | 10.00 | 2,434,671.06 |
He intentado reemplazos anidados, pero no pude encontrar un patrón para buscar de manera confiable sin regex, que es T/SQL. También intenté un enfoque TOKEN en SSIS por este caballero, pero tampoco fue fructífero. Los enfoques de reemplazo anidado se atascaron en los campos de dinero que están por debajo de 1,000 (como 0.00) y el enfoque TOKEN SSIS presume que todos los campos están delimitados por comillas, lo cual no es cierto en mi ejemplo.
davy.ai
Una forma de abordar este problema es utilizando la función PARSENAME en T-SQL. La función PARSENAME se utiliza típicamente para extraer partes de un nombre de objeto de base de datos de cuatro partes (por ejemplo, esquema.tabla.columna), pero también se puede utilizar para extraer valores de una cadena delimitada.
Primero, podemos utilizar la función REPLACE para reemplazar todas las instancias de ” con un espacio en blanco para eliminar las comillas. Luego, podemos utilizar la función PARSENAME para extraer cada campo de la cadena separada por comas.
Aquí hay una consulta de ejemplo:
Este código utiliza la función REPLACE para eliminar todas las instancias de ” de la columna C0. Luego, utiliza la función PARSENAME para extraer cada campo de la cadena separada por comas, comenzando desde el campo más a la derecha (denotado por 0) y avanzando hacia la izquierda. Cada campo recibe un alias separado (por ejemplo, F1, F2, etc.) para una mayor legibilidad.
Tenga en cuenta que este enfoque asume que el número de campos en cada cadena separada por comas es fijo, y que no hay comas adicionales en ninguno de los valores de campo. Si estas suposiciones no se cumplen, entonces puede ser necesario un preprocesamiento adicional antes de utilizar PARSENAME.