2012-06-06 15 views
12

Ho bisogno di un'espressione SSIS per ottenere la parte sinistra di una stringa prima del separatore, quindi inserire la nuova stringa in una nuova colonna. Ho controllato nella colonna derivata, non sembra tali espressioni. "Sottostringa" poteva solo restituire la parte di stringa con una lunghezza fissa.SSIS Come ottenere una parte di una stringa tramite separatore

Ad esempio, con la stringa separatore '-':

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

P.S. Sapevo che questo potrebbe essere fatto in MySQL con SUBSTRING_INDEX(), ma sto cercando un equivalente in SSIS, o almeno in SQL Server

+0

possibile duplicato di [Help with SubString in SSIS] (http://stackoverflow.com/questions/5324590/help-with-substring-in-chassis) – Echo

risposta

24

naturalmente è possibile:

enter image description here

basta configurare le colonne derivate come questo:

enter image description here

Qui è l'espressione per rendere la vita più facile:

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

FYI, il secondo "1" significa per ottenere la prima occorrenza della stringa "-"

MODIFICA: espressione trattare con stringa senza "-"

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

Thx molto per la risposta !! Tuttavia, alcuni valori della colonna "name" non hanno un separatore e in questo caso, vorrei che la colonna "new_name" fosse la stessa di "name". Per esempio. uno dei nomi è "Scienza", e il nuovo nome sarebbe solo "Scienza". L'intero processo dovrebbe essere così: se il nome ha un separatore, utilizzare la soluzione, altrimenti copiare dal nome al nuovo nome – Echo

+0

che può essere facilmente risolto con un'espressione condizionale. Vedi la mia modifica! – Diego

7

È possibile specificare la lunghezza di copiare nella funzione SUBSTRING e verificare la posizione del cruscotto utilizzando CHARINDEX

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

Per l'espressione SSIS è praticamente lo stesso codice:

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

grazie mille per questa risposta ~! Vorrei poter selezionare due come quelli accettati ... – Echo

10

Meglio tardi che mai, ma ho voluto fare anche questo e ho trovato questo.

TOKEN(character_expression, delimiter_string, occurrence) 

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

rendimenti poco la sorgente è inferiore

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

+1

Questa è probabilmente la migliore risposta qui. – Cos

+0

L'ho cercato per sempre !! Migliore risposta – SKh

0

se param rendimenti lunghezza SOTTOSTRINGA -1, allora risulta in errore, "La lunghezza -1 non è valido per la funzione "SUBSTRING". Il parametro length non può essere negativo, modifica il parametro length su zero o un valore positivo. "

Problemi correlati