2017-02-27 7 views
0

oracle sql regex関数に関連する質問があります。Oracle Regexと少なくとも1つのセリフが一致します

私は一連のゼロと1を持っています。

例:それはのように変えることができ

1111000 
000001 
0101111 
10000 

を少なくとも1つの「1」は、このセリエであった場合、その後、私は「1」 として出力したいそうでない場合、私は「0」を出力リレーします。

SELECT REGEXP_REPLACE('1,1,1,0','[0,]||[1]+','') FROM DUAL 

しかし、これは単に出力し、「1」を除くシリーズのうち「0」

だから私の質問:だから私のような何かを試してみましたどのように私は、Oracle SQLでこれを達成することができますか?

+0

Yで文字列 '1,1,1,0'を単一の「シーケンス」とみなし、 '1'を返すか、シーケンスのリストとして返します。これは '1,1,1,0'を返します。 – Aleksej

+0

文字列 '1,1,1,0'は単一の "シーケンス"と見なされ、 "少なくとも1つの '1'"ルールが満たされているので私は1を返します。@Aleksej – gobo

答えて

3

私はよく理解し、あなただけの文字列が「1」かが含まれているかどうかを確認する必要がある場合は、正規表現を必要としないかもしれないとINSTRは十分に考えられます。

select case 
     when instr(yourString, '1') = 0 
      then '1 is not in the string' 
      else '1 is in the string' 
     end 
from dual 
+0

ありがとう@aleksej! – gobo

0

`%LIKE 1%」は動作しますあなたのためにも...

with dt as (
select '00000000' seq from dual union all 
select '00011000' seq from dual) 
select 
    seq, 
    case when seq like '%1%' then 1 else 0 end as res 
from dt; 

SEQ    RES 
-------- ---------- 
00000000   0 
00011000   1 
0

後、私にも、これも私のために働いたことを考え出した:

SELECT 
    REGEXP_REPLACE('MY_STRING' , '.?+1?[0,]', '') as COLUMN_NAME 
    FROM dual; 
関連する問題