2017-02-18 3 views

答えて

1

以下のクエリでは、ソリューションの一部ではなく、実際のテーブル名を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. 
+0

返信ありがとうございます。しかし、少しdiffcultに見えます。 AS CustomerName、REGEXP_SUBSTR(uui、 '[^ ||] +'、1、2)選択したNVL(SUBSTR(uui、0、INSTR、uui、 '||') - 1)、uui) –

+0

@ashishjayara - 顧客名と顧客IDが決して**ヌルにならないことが分かっている場合(現在ではなく、将来はまだクエリが使用される2年後)、解を簡略化することができる。それは事実ですか?このソリューションは、その可能性を処理する必要があるため、「やや難しい」と見なされます。また、あなたが理解できなかった答えの部分について尋ねると、あなたは有益かもしれません。 – mathguy

+0

はい私は今それを得ましたありがとう:-)私はあなたのテストデータと混乱しましたが、私は今理解して、再びありがとう –

関連する問題