2017-03-14 8 views
-1

私は、下の例の結果をoracleを使用して取得するのに問題があります。私は、フィールドAの異なる多くのデータを持っている、とフィールドBの結果になることを(次のように)いくつかのステップを実行する必要があり3つの異なる特定の文字の後に文字を削除します

例: LM2963NAMBLK-P/NOPB/SAと結果:LM2963NAM

  1. '/'
  2. 削除文字'-P'
  3. 後のすべての文字を削除する文字'BLK'
+0

これはまったく明らかではありません。 「文字を削除する」とは何を意味しますか?1つの文字を削除するか、または「マーカー」の後のすべての文字を削除しますか?次に、3つの削除をその順序で実行する必要がありますか?入力文字列に複数の '/'があるとどうなりますか?そして、それはあなたが "マーカー" **と**文字を文字列(文字)から削除するように見えます。 「おおよその」(不明瞭で紛らわしい)問題に対する良い答えは得られません。 – mathguy

+0

はい。わかりにくい問題は間違いです。 "マーカー"の後にファイルのすべての文字を削除する必要があります。通常、m.excelを使用する場合1step:フィールドの "/"を区切ります 2step:フィールドに "-P"がある場合は、この式を使用して削除します。= IF(RIGHT(A2,2)= " - P (B2、LEN(B2) - A2)、第3ステップ:この式を使用して "BLK"を取り除く(右(B2,3)= "BLK"、左(B2、LEN 3)、B2)を使用して最終結果を得る。 – Seaty

+0

ありがとうございました..コメント@Wistful Thinkerは私にとって成功です。 A、 regexp_replace(regexp_replace(A、 '-P | /.*'、 '')、 '^(。*)BLK $'、 '\ 1')B – Seaty

答えて

0

以下の作業をする必要があります:

select A, 
    regexp_replace(
    regexp_replace(A, '-P|/.*', ''), 
    '^(.*)BLK$', '\1' 
    ) B 
--remainder of query 

ネストされたREGEXP_REPLACEが空を持つ任意の文字の0回以上の繰り返しが続く-Pを交換するか/します最後に可能なBLKを加えて、あなたの望む出力を残すことができます。 | 「または」を表す。私は現時点ではOracleにログインしていませんが、Oracle正規表現では特殊文字ではない/としてエスケープする必要はありません。[]内の特殊文字です。外側のregexp_replaceは、BLKが最後にある場合は空の文字列で置き換えられ、存在しない場合は文字列を返します。

+0

ありがとうございました!私が望むように結果を得る。 – Seaty

+0

あなたは大歓迎です。お役に立てて嬉しいです。 –

0
を削除

まあ、これは一つの方法です...

select substr(substr(substr('LM2963NAMBLK-P/NOPB',1, slash_pos-1), 1, dash_p_pos-1), 1, blk_pos-1) 
    from 
    (
    select 'LM2963NAMBLK-P/NOPB' 
    , instr('LM2963NAMBLK-P/NOPB', '/') slash_pos 
    , instr('LM2963NAMBLK-P/NOPB', '-P') dash_p_pos 
    , instr('LM2963NAMBLK-P/NOPB', 'BLK') blk_pos 
    from dual 
); 

SUBSTR(SU 
--------- 
LM2963NAM 
+0

ありがとうございます。私の問題はまだ解決されません。私は列のすべての行の文字を削除する必要があります。 – Seaty

関連する問題