2017-11-09 9 views
0

Oracle 12cR1データベースにデータフィールドがあります。フィールドは製品デスクリプタで、フィールドの先頭には製品IDが含まれています。その後、製品名が続きます。私はプロダクトIDを取り除く必要があります。 - オーパスNEM Oracle SQL - 先頭のパターン化された部分文字列を削除する

  • 0P22 - 40021 - ご注文はセルフサービス
  • をキャプチャ

    • 0P3H:プロダクトIDは、データは通常、次のいずれかのように見えます... 2つのいずれかの形式にすることができHR - - プロモーションモジュール
    など

    • 0C34などの文字、製品名の一部である、 - 「」いくつかのケースがあることに注意してくださいその後、

      ITは、文字列の先頭にあるときに私の知る限り、私は以下を削除する必要があります...

      • 4文字は、スペースその後、その後、その後、スペース、その後スペース
      • 4文字をダッシュダッシュその後、スペース5文字のスペースダッシュ スペース

      は、どのように私は、Oracle SQLがフィールドを読み、これらの2つの異なるサブストリングを削除するには書くでしょうか?

      ありがとうございます!

    +0

    https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm – jarlh

    答えて

    1

    あなたの説明から、caseは最も単純であるかもしれない:最初に逆に

    select (case when field like '____ - _____ -%' then substr(field, 15) 
          else substr(field, 7) 
         end) 
    
    +0

    これは、働いていた...選択します( '____ - _____ - %'のようなフィールドの場合substr(フィールド、15) else substr(フィールド、7) – user1009073

    0

    サブストリング「 - 」と、その開始位置から文字列の末尾にSUBSTR。私はこのように、 '%' を追加する必要がありましたが、

    select TRIM(substr('0P3H - Opus NEM', instr('0P3H - Opus NEM', '-', -1, 1) + 1)) from dual 
    
    select TRIM(substr('0P22 - 40021 - Order Capture Self Service', instr('0P22 - 40021 - Order Capture Self Service', '-', -1, 1) + 1)) from dual 
    
    +0

    申し訳ありませんが、私はあなたが「 - 」という名前の一部になる場合があることに気付きました。その場合、私が記述した方法は動作しません。 – TurtlesAllTheWayDown