私は、下の例の結果をoracleを使用して取得するのに問題があります。私は、フィールドAの異なる多くのデータを持っている、とフィールドBの結果になることを(次のように)いくつかのステップを実行する必要があり3つの異なる特定の文字の後に文字を削除します
例: LM2963NAMBLK-P/NOPB/SA
と結果:LM2963NAM
'/'
- 削除文字
'-P'
- 後のすべての文字を削除する文字
'BLK'
私は、下の例の結果をoracleを使用して取得するのに問題があります。私は、フィールドAの異なる多くのデータを持っている、とフィールドBの結果になることを(次のように)いくつかのステップを実行する必要があり3つの異なる特定の文字の後に文字を削除します
例: LM2963NAMBLK-P/NOPB/SA
と結果:LM2963NAM
'/'
'-P'
'BLK'
以下の作業をする必要があります:
select A,
regexp_replace(
regexp_replace(A, '-P|/.*', ''),
'^(.*)BLK$', '\1'
) B
--remainder of query
ネストされたREGEXP_REPLACEが空を持つ任意の文字の0回以上の繰り返しが続く-Pを交換するか/します最後に可能なBLKを加えて、あなたの望む出力を残すことができます。 | 「または」を表す。私は現時点ではOracleにログインしていませんが、Oracle正規表現では特殊文字ではない/としてエスケープする必要はありません。[]内の特殊文字です。外側のregexp_replaceは、BLKが最後にある場合は空の文字列で置き換えられ、存在しない場合は文字列を返します。
ありがとうございました!私が望むように結果を得る。 – Seaty
あなたは大歓迎です。お役に立てて嬉しいです。 –
まあ、これは一つの方法です...
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
ありがとうございます。私の問題はまだ解決されません。私は列のすべての行の文字を削除する必要があります。 – Seaty
これはまったく明らかではありません。 「文字を削除する」とは何を意味しますか?1つの文字を削除するか、または「マーカー」の後のすべての文字を削除しますか?次に、3つの削除をその順序で実行する必要がありますか?入力文字列に複数の '/'があるとどうなりますか?そして、それはあなたが "マーカー" **と**文字を文字列(文字)から削除するように見えます。 「おおよその」(不明瞭で紛らわしい)問題に対する良い答えは得られません。 – mathguy
はい。わかりにくい問題は間違いです。 "マーカー"の後にファイルのすべての文字を削除する必要があります。通常、m.excelを使用する場合1step:フィールドの "/"を区切ります 2step:フィールドに "-P"がある場合は、この式を使用して削除します。= IF(RIGHT(A2,2)= " - P (B2、LEN(B2) - A2)、第3ステップ:この式を使用して "BLK"を取り除く(右(B2,3)= "BLK"、左(B2、LEN 3)、B2)を使用して最終結果を得る。 – Seaty
ありがとうございました..コメント@Wistful Thinkerは私にとって成功です。 A、 regexp_replace(regexp_replace(A、 '-P | /.*'、 '')、 '^(。*)BLK $'、 '\ 1')B – Seaty