皆さんからの緊急の支援が必要です。ユーザーのフルネームを表す列があります。今度はそれを名前と名前に分割したいと思います。
フルネームの形式は「World、hello」です。ここでの名はhello、姓はworldです。
Derived Column(SSIS)を使用しており、名にRight関数を使用し、姓にサブストリング関数を使用していますが、これらの結果は空白のようです。これは私でも空白です。:)
それは私のために働いています。一般に、他の人があなたの問題を再現してトラブルシューティングするのを助けるために、このような場所に関する質問でより詳細を提供する必要があります。このフィールドでNULLをアドレス指定する必要があるかどうかを指定しなかったし、それをどのように解釈したいかわからないので、この回答には改善の余地があります。
単純なOLEDBソースから始めて、「SELECT'World、Hello'ASName」のクエリをハードコーディングしました。
2つの派生列タスクを作成しました。1つ目は、FirstCommaPositionという列をデータフローに追加します。私が使用した式FINDSTRING(Name,",", 1)
は次のとおりです。NAMEがNULL可能である場合、FINDSTRING関数を呼び出す前にNULL可能性をテストする必要があります。次に、NULLの場合に分割データをどのように保存するかを決定する必要があります。最初と最後の両方をNULLにする必要があると思いますが、それはわかりません。
これを別々のステップで行う理由は2つあります。1つ目はパフォーマンスです。直感に反するように聞こえますが、SSISエンジンは操作をより適切に並列化できるため、派生列での処理を減らすとパフォーマンスが向上します。もう1つはもっと単純です。この値を使用して名前と名前を分割する必要があるため、数式をコピーして貼り付けるよりも、列を参照する方が簡単でメンテナンスも少なくて済みます。
2番目の派生列は実際に分割を実行します。
私のFirstNameUnicode列は、(FirstCommaPosition > 0) ? RTRIM(LTRIM(RIGHT(Name,FirstCommaPosition))) : ""
「前の手順でカンマが見つかった場合は、カンマの位置から文字列の最後まですべてを切り取り、トリム操作を適用します。カンマが見つからなかった場合は、次の式を使用します。空白の文字列。式のデフォルトの文字列タイプはUnicode(DT_WSTR)であるため、それが必要ない場合は、結果を正しい文字列コードページ(DT_STR)にキャストする必要があります。
私のLastNameUnicode列は、この式(FirstCommaPosition > 0) ? SUBSTRING(Name,1,FirstCommaPosition -1) : ""
を使用します。ただし、RIGHTの代わりにSUBSTRING操作を使用することを除いて、上記と同様のロジックです。2012リリースのSSIS以降のユーザーは、SUBSTRINGの代わりにLEFT関数を使用できることを喜んでください。また、カンマを削除するには、1つの位置をバックオフする必要があることに注意してください。