0

私は分割する必要のある情報を持つフィールドFARMBOLを持っています。 フィールドのある時点では、「IMPORTER:」と表示され、さらに詳しい情報が表示されます。別としてOracle SQLの部分文字列の前後にすべてを抽出する必要があります

すなわち、「20394823409輸入業者:ジョン・ドウ」

私は1つのフィールドとして「20394823409」を抽出する必要がある、と「ジョン・ドウ輸入」。これどうやってするの?このコードは、Oracle DB上のSSRSのクエリの一部です。

+0

実装するロジックは何ですか?最初の列の最初のスペースまで、そして最初のスペースの後のすべてを2番目のスペースとして読み上げますか?最初の数字以外の文字を読み込みますか?最初の列の最初のアルファベット文字の前のすべて? –

+0

文字列の "IMPORTER"部分が列1、 "IMPORTER"とそれ以降はすべて列2になります。 –

+0

したがって、すべての行に "IMPORTER"という文字列がありますか? –

答えて

1

それは本当に常に「輸入業者:」言う場合は取得するためにどのくらい把握し、その後あなたは、サブ文字列を取得するためにsubstr()を使用することができ、かつinstr()を:

with t (farmbol) as (select '20394823409 IMPORTER: John Doe' from dual) 
select substr(farmbol, 1, instr(farmbol, 'IMPORTER:') - 1) as part1, 
    substr(farmbol, instr(farmbol, 'IMPORTER:')) as part2 
from t; 

PART1  PART2    
------------ ------------------ 
20394823409 IMPORTER: John Doe 

あなたが抽出された値を操作することができ、例えば最初の部分から末尾のスペースをトリミングする、またはそれが常になる場合数に変換:

with t (farmbol) as (select '20394823409 IMPORTER: John Doe' from dual) 
select substr(farmbol, 1, instr(farmbol, 'IMPORTER:') - 1) as part1, 
    trim(substr(farmbol, 1, instr(farmbol, 'IMPORTER:') - 1)) as part1_trim, 
    cast(substr(farmbol, 1, instr(farmbol, 'IMPORTER:') - 1) as number) as part1_num, 
    substr(farmbol, instr(farmbol, 'IMPORTER:')) as part2 
from t; 

PART1  PART1_TRIM  PART1_NUM PART2    
------------ ----------- ------------ ------------------ 
20394823409 20394823409 20394823409 IMPORTER: John Doe 

そして、あなたは本当に「IMPORTER:」保持しない場合は、調整することができ、文字列の一部をその固定値の長さによって、第2のサブストリングの開始位置は、:あなたは、より柔軟なパターンを必要に応じて

with t (farmbol) as (select '20394823409 IMPORTER: John Doe' from dual) 
select cast(substr(farmbol, 1, instr(farmbol, 'IMPORTER:') - 1) as number) as part1_num, 
    trim(substr(farmbol, instr(farmbol, 'IMPORTER:') + 9)) as importer 
from t; 

    PART1_NUM IMPORTER 
------------ -------- 
20394823409 John Doe 

、あなたではなく、正規表現を使用することができますが、それはやり過ぎ、ここのように思えます。

これを行うことは、実際にこのデータを別々の列に格納することを示唆しています。単一の文字列でマッシュさせるのではなく、異なるデータ型で開始することがあります。

+0

ブーム。ありがとう。 –

関連する問題