2012-06-06 12 views
12

Necesito una expresión SSIS para obtener la parte izquierda de una cadena antes del separador, y luego pongo la nueva cadena en una nueva columna. Revisé en columna derivada, parece que no hay tales expresiones. "Subcadena" solo podría devolver una parte de cadena con longitud fija.SSIS Cómo obtener una parte de una cadena por separador

Por ejemplo, la cadena de separación '-':

Art-Reading    Should return Art 
Art-Writing    Should return Art 
Science-chemistry   Should return Science 

P. S. yo sabía que esto podría hacerse de MySQL con SUBSTRING_INDEX(), pero estoy buscando un equivalente en SSIS, o al menos en SQL Server

+0

posible duplicado de [Ayuda con SubString en SSIS] (http://stackoverflow.com/questions/5324590/help-with-substring-in-ssis) – Echo

Respuesta

24

, por supuesto, se puede:

enter image description here

acaba de configurar sus columnas derivadas de esta manera:

enter image description here

Aquí es la expresión para hacer la vida más fácil:

SUBSTRING(name,1,FINDSTRING(name,"-",1) - 1) 

FYI, el segundo "1" significa para obtener la primera aparición de la cadena "-"

EDITAR: expresión lidiar con cadena sin "-"

FINDSTRING(name,"-",1) != 0 ? (SUBSTRING(name,1,FINDSTRING(name,"-",1) - 1)) : name 
+0

¡Muchas gracias por la respuesta! Sin embargo, algunos valores de la columna "nombre" no tienen un separador y en este caso, deseo que la columna "nuevo_nombre" sea la misma que "nombre". P.ej. uno de los nombres es "Ciencia", y el nuevo nombre simplemente sería "Ciencia". Entonces todo el proceso sería así: si el nombre tiene un separador, entonces use la solución; de lo contrario, copie de nombre a nuevo_nombre – Echo

+0

que pueda resolverse fácilmente con una expresión condicional. Ver mi edición! – Diego

7

Puede especificar la longitud de copiar en la función SUBSTRING y comprobar la ubicación del tablero usando CHARINDEX

SELECT SUBSTRING(@sString, 1, CHARINDEX('-',@sString) - 1) 

Para la expresión de SSIS es más o menos el mismo código:

SUBSTRING(@[User::String], 1, FINDSTRING(@[User::String], "-", 1)-1) 
+0

muchas gracias por esta respuesta ~! Desearía poder seleccionar dos como aceptados ... – Echo

10

vale tarde que nunca, pero quería hacer esto también y encontramos este.

TOKEN(character_expression, delimiter_string, occurrence) 

TOKEN("a little white dog"," ",2) 

vuelve poco la fuente está por debajo de

http://technet.microsoft.com/en-us/library/hh213216.aspx

+1

Esta es probablemente la mejor respuesta aquí. – Cos

+0

¡He estado buscando esto para siempre! La mejor respuesta – SKh

0

si los rendimientos param longitud SUBSTRING -1 entonces resulta en error, "La longitud -1 no es válido para la función "SUBSTRING". El parámetro de longitud no puede ser negativo. Cambie el parámetro de longitud a cero o a un valor positivo ".

Cuestiones relacionadas