2016-07-13 10 views
0

私はここにこだわっています。私はオラクルを使用しています。文字列の最初の部分が '|'の最初の文字の前に出ます。これは私のクエリですが、最後の部分、つまり25.0を返します。私はそれが最初の部分、すなわち53に戻ることを望む。それをどのように達成するのか?文字列の最初の部分を取得するためのOracle regexp_substr

select regexp_substr('53|100382951130|25.0', '[^|]+$', 1,1) as part1 from dual 

答えて

2

あなたは常に少なくとも一つの発生'|'のを持っていると仮定すると、あなたはありません正規表現で、次のように使用することができます:あなたも対処しても同じことを達成するために正規表現を使用するか、または可能性があり

with test(string) as (select '53|100382951130|25.0' from dual)  
select substr(string, 1, instr(string, '|')-1) 
from test 

with test(string) as (
    select '53|100382951130|25.0' from dual union all 
    select '1234567' from dual)  
select string, 
     substr(string, 1, instr(string, '|')-1), 
     regexp_substr(string, '[^|]*') 
from test 

あなたも、正規表現なし'|'が生じないとのケースを扱うことができます:あなたは何'|'を持っていないする場合

with test(string) as (
    select '53|100382951130|25.0' from dual union all 
    select '1234567' from dual) 
select string, 
     substr(string, 1, instr(string, '|')-1), 
     regexp_substr(string, '[^|]*'), 
     substr(string, 1, 
         case 
          when instr(string, '|') = 0 
          then length(string) 
          else 
          instr(string, '|')-1 
         end 
      ) 
from test 
+0

ありがとうございます。それは私を分類した –

関連する問題