Oracleで次の文字列を抽出したいと考えています。どうやってやるの?Oracleで文字列を抽出する方法
- 元の文字列:
011113584378(+) CARD, STAFF
- 予想される文字列:私はあなたがPL/SQL関数を書くの贅沢を持っていると推定
STAFF CARD
Oracleで次の文字列を抽出したいと考えています。どうやってやるの?Oracleで文字列を抽出する方法
011113584378(+) CARD, STAFF
STAFF CARD
?入力を解析するには、"SUBSTR"、または"INSTR"、||
concatenation operatorを使用してください。 、私は 'の値を返す必要があります。この場合、
F:\Siebfile\YD\S_SR_ATT_1-60SS_1-AM3L.SAF
:
https://www.techonthenet.com/oracle/questions/parse.php
...フィールドには次の値が含まれる場合があります。ここでは
は一例ですこれは3番目と4番目のアンダースコアの間にある値であるため、1-60SS 'となります。SOLUTION:
create or replace function parse_value (pValue varchar2)
return varchar2
is
v_pos3 number;
v_pos4 number;
begin
/* Return 3rd occurrence of '_' */
v_pos3 := INSTR (pValue, '_', 1, 3) + 1;
/* Return 4rd occurrence of '_' */
v_pos4 := INSTR (pValue, '_', 1, 4);
return SUBSTR (pValue, v_pos3, v_pos4 - v_pos3);
end parse_value;
SUBSTRとINSTRを使用するPL/SQL関数を書く必要があるのはなぜですか? – mathguy
[OK]を、私はかみますよ。この例では、REGEXP_REPLACEを使用して文字列を記述し、必要な部分を保存してから、文字列を戻す前に再配置します。この例があなたが提供した1行で動作することを保証することしかできないので、あなたが扱っているデータの実例をいくつか示した方が良いでしょう。
正規表現は、文字列の先頭から末尾のparen-spaceまでの任意の文字に一致します。コンマスペースを含まない文字の次のセットは、それらを括弧で囲むことによって "記憶"されます。これはキャプチャされたグループと呼ばれます。次にキャプチャされるグループは、そのカンマ区切り文字の後ろの文字の集合(行の終わり)(ドル記号)です。キャプチャされたグループは、左から右の順に参照されます。 3番目の引数は、返される文字列で、2番目と1番目のキャプチャされたグループがその順序で、スペースで区切られています。
SQL> with tbl(str) as (
select '+011113584378(+) CARD, STAFF' from dual
)
select regexp_replace(str, '^.*\) (.*), (.*)$', '\2 \1') formatted
from tbl;
FORMATTED
----------
STAFF CARD
SQL>
入力から出力に行くロジックは何ですか?形式は常に SPACE <文字のシーケンス> COMMA SPACE <文字のシーケンス>ですか?文字列は常に空ではないのですか?それらは文字だけか、DASH( - )かUNDERSCORE(_)か数字を含むことができますか?あらゆる種類のコードを考える前に論理を明確にしてください。 –
mathguy