0
私はoracleで新しく、「Ashu || 123 || Main Menu | ENG || 1 | 1」という列から値を取得したいと考えています。 各値は||で区切られていますsymbol.in上記の値Ashuは顧客名、123はidです。顧客名と顧客IDの両方の値が必要です。||に格納されたoracleから値を取得する方法分かれている?
私はoracleで新しく、「Ashu || 123 || Main Menu | ENG || 1 | 1」という列から値を取得したいと考えています。 各値は||で区切られていますsymbol.in上記の値Ashuは顧客名、123はidです。顧客名と顧客IDの両方の値が必要です。||に格納されたoracleから値を取得する方法分かれている?
以下のクエリでは、ソリューションの一部ではなく、実際のテーブル名をtest_data
ではなく、メインクエリで使用し、実際のカラム名はstr
ではなく実際に使用します。すべてのケースでクエリが正しく動作することを確認するために、いくつかの特別なケースをテストに含めました。最初の値(最初の数値の前は||
)は顧客名で、2番目の値は顧客IDであり、残りの入力文字列は無視することができます。私は、クエリがnull
の値を正しく処理しているかどうかを調べました。
私は顧客IDを文字列として残しました。数値でなければならない場合は、to_number()
の範囲内ですべてをラップする方が良いかもしれません。
with
test_data (str) as (
select 'Ashu||123||Main Menu|ENG||1|1' from dual union all
select 'Misha||125' from dual union all
select 'Babu||||Main Menu|NZL||?' from dual union all
select 'Rim||' from dual union all
select 'Todd' from dual union all
select '||139||Other Stuff' from dual
)
-- end of test data (only for testing and illustration) - not part of solution
-- SQL query begins BELOW THIS LINE
select str,
regexp_substr(str, '([^|]*)(\|\||$)', 1, 1, null, 1) as cust_name,
regexp_substr(str, '([^|]*)(\|\||$)', 1, 2, null, 1) as cust_id
from test_data
;
STR CUST_NAME CUST_ID
----------------------------- --------- -------
Ashu||123||Main Menu|ENG||1|1 Ashu 123
Misha||125 Misha 125
Babu||||Main Menu|NZL||? Babu
Rim|| Rim
Todd Todd
||139||Other Stuff 139
6 rows selected.
返信ありがとうございます。しかし、少しdiffcultに見えます。 AS CustomerName、REGEXP_SUBSTR(uui、 '[^ ||] +'、1、2)選択したNVL(SUBSTR(uui、0、INSTR、uui、 '||') - 1)、uui) –
@ashishjayara - 顧客名と顧客IDが決して**ヌルにならないことが分かっている場合(現在ではなく、将来はまだクエリが使用される2年後)、解を簡略化することができる。それは事実ですか?このソリューションは、その可能性を処理する必要があるため、「やや難しい」と見なされます。また、あなたが理解できなかった答えの部分について尋ねると、あなたは有益かもしれません。 – mathguy
はい私は今それを得ましたありがとう:-)私はあなたのテストデータと混乱しましたが、私は今理解して、再びありがとう –