このような質問をたくさん見つけましたが、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;
前もって感謝します!