web-dev-qa-db-fra.com

SSIS Comment obtenir une partie d'une chaîne par séparateur

J'ai besoin d'une expression SSIS pour obtenir la partie gauche d'une chaîne avant le séparateur, puis placer la nouvelle chaîne dans une nouvelle colonne. J'ai vérifié dans la colonne dérivée, il semble pas de telles expressions. "Substring" peut uniquement renvoyer une partie de chaîne de longueur fixe. 

Par exemple, avec la chaîne de séparation '-':

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

P.S. Je savais que cela pourrait être fait dans MySQL avec SUBSTRING_INDEX (), mais je cherche un équivalent dans SSIS, ou du moins dans SQL Server.

13
Echo

bien sûr vous pouvez:

enter image description here

configurez simplement vos colonnes dérivées comme ceci:

enter image description here

Voici l'expression pour vous simplifier la vie:

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

FYI, le second "1" signifie obtenir la première occurrence de la chaîne "-"

EDIT: Expression pour traiter une chaîne sans "-"

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

Mieux vaut tard que jamais, mais je voulais faire ça aussi et j'ai trouvé ça.

TOKEN(character_expression, delimiter_string, occurrence)

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

renvoie peu la source est en dessous

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

17
David

Vous pouvez spécifier la longueur à copier dans la fonction SUBSTRING et rechercher l'emplacement du tiret à l'aide de CHARINDEX.

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

Pour l'expression SSIS, c'est à peu près le même code:

SUBSTRING(@[User::String], 1, FINDSTRING(@[User::String], "-", 1)-1)
8
msmucker0527

si SUBSTRING length param renvoie -1, cela entraîne une erreur, "La longueur -1 n'est pas valide pour la fonction" SUBSTRING ". Le paramètre length ne peut pas être négatif. Définissez le paramètre length sur zéro ou une valeur positive."

1
Ashish