2

現在、既存の SSIS パッケージを更新しています。現在のパッケージは、IT 部門が提供する Excel スプレッドシートからデータを取得します。コンピューターのマシン名を一覧表示し、ライセンス レポート用にカウントします。

現在、マシン名の最初の部分からジョブ (派生列) の M (モバイル) または D (デスクトップ) を取り除いて、レポートに必要なユーザー名だけを返すようにしています。

MBRUBAKERBR => BRUBAKERBR

しかし、当社の IT 部門は Windows 7 を実装したばかりで、それに伴い新しい命名規則が導入されました。現在、更新されたすべてのマシンの最後に追加された 76A、B、C、または D があります。マシンが更新されていない場合は、古い命名規則が使用されます (上記を参照)。

XP にとどまらなければならないマシンもあり、それらの名前は、末尾に X3A、B、C、または D が付くように更新されています。

MBRUBAKERBR76A or DBRUBAKERX3C

必要なのは、名前の最後の部分を削除して、レポート用にユーザー名を取得することです。

問題は、LEFT、RIGHT、LTRIM、または RTRIM 式を使用できないことです。これは、一部のコンピューター名の前に M または D しかないためです (まだアップグレードされていないため)。

このパッケージを再構築せずにこれらの文字を削除するにはどうすればよいですか?

更新: M と D を削除した既存の式を更新したいと思います。使用している式は次のとおりです。

SUBSTRING(Name,2,50) 

これは、SSIS パッケージの派生列にあります。

サンプルデータに関しては、ここに入っているように見えます.

|      Name      |
| MBrubakerBR76A |
| MBROCKSKX3A    |
| DGOLDBERGZA    |
| MWILLIAMSEL    |
| DEASTST76C     |
| DCUSICKEVX3D   |

これは返して欲しいものです。

|      Name      |
| BRUBAKERBR     |
| BROCKSK        |
| GOLDBERGZA     |
| WILLIAMSEL     |
| EASTST         |
| CUSICKEV       | 

さらに情報や例が必要な場合はお知らせください。

4

1 に答える 1

1

最初に、マシンがアップグレードされているかどうかを判断し、アップグレードされている場合は、最後の 3 文字と最初の文字を取り除きます。アップグレードされていない場合は、最初の文字を取り除いてください。コードを明確にするために、Trim 関数は避けました。

SELECT
machineName,

CASE WHEN RIGHT(machineName, 3) Like '%[0-9]%' THEN
  SUBSTRING(machineName, 2, len(machineName) - 4)
ELSE 
  RIGHT(machineName, len(machineName)-1)
END AS UserName

From MachineList

SQL フィドルの例

SSIS 式 SSIS 式
ではパターン マッチングが機能しないため、これを試してください

LEFT(RIGHT(machineName, 3),2)="X3"||LEFT(RIGHT(machineName, 3),2)="76"?SUBSTRING(machineName, 2, len(machineName) - 4):RIGHT(machineName, len(machineName)-1)
于 2013-10-03T03:30:55.573 に答える