0

このような質問をたくさん見つけましたが、100% 適切な質問はありません。私はOracle 11g Expressを持っています

私はその文字列を持っています

'abcd,123,,defoifcd,"comma, in string",87765,,,hello'

これは、通常、コンマがデータを区切ることを意味しますが、空のデータである可能性があり (一連の場合はさらに)、データにコンマがある場合は引用されます。

これまでのところ、最良の正規表現はそれです

'("[^"]*"|[^,]+)'

しかし、これはそのクエリを使用してすべての空のデータの最後に置きます

with test as 
(select 
'abcd,123,,defoifcd,"comma, in string", 87765,,,hello'
str from dual  
)  
select REGEXP_SUBSTR(str, '("[^"]*"|[^,]+)', 1, rownum) split
from test  
connect by level <= length (regexp_replace (str, '("[^"]*"|[^,]+)'))  + 1;

また、空のデータを ,n/a に置き換えてみたので、

'abcd,123,n/a,defoifcd,"comma, in string",87765,n/a,n/a,hello'

ただし、regexp_replace は空のデータの最初の発生のみを置き換えます

select 
regexp_replace('abcd,123,,defoifcd,"comma, in string",87765,,,hello', '(,,)', ',n/a,')
str from dual;  

前もって感謝します!

4

1 に答える 1