web-dev-qa-db-ja.com

SSIS区切り文字列の一部を取得する方法

セパレーターの前の文字列の左部分を取得し、新しい列に新しい文字列を配置するために、SSIS式が必要です。派生列にチェックインしましたが、そのような表現はないようです。 Substringは、固定長の文字列部分のみを返すことができました。

たとえば、区切り文字列_-_の場合:

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

追伸これはSUBSTRING_INDEX()を使用してMySQLで実行できることを知っていましたが、SSISまたは少なくともSQL Serverで同等のものを探しています

15
Echo

もちろん次のことができます。

enter image description here

派生列を次のように構成するだけです。

enter image description here

これがあなたの人生を楽にする表現です:

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

参考までに、2番目の「1」は、文字列「-」の最初の出現を取得することを意味します

編集:「-」なしで文字列を処理する式

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

絶対に遅れるよりはましですが、私もこれをやりたかったので、これを見つけました。

TOKEN(character_expression, delimiter_string, occurrence)

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

ソースを下にほとんど返さない

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

21
David

SUBSTRING関数でコピーする長さを指定し、CHARINDEXを使用してダッシュの場所を確認できます。

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

SSIS式については、ほぼ同じコードです。

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

sUBSTRING length paramが-1を返す場合、「長さ-1は関数 "SUBSTRING"に対して無効です。lengthパラメーターは負にできません。lengthパラメーターをゼロまたは正の値に変更してください。」というエラーが発生します。

1
Ashish