p_value
を使用して文字列を分割していp_delimeter
ます[^,]+
.
ほとんどの場合、次のクエリは予想どおりに機能しますが、次のような場合にはうんざりします。
- 文字列
p_value
には改行が含まれていますchr(10)
。 p_value
p_delimeter
部分文字列として含まれていない、
そのため、結果として全体が1行になると予想されますがp_value
、改行後の残りは得られません。
'm'
ここでは、 への呼び出しに修飾子がないため、regexp は改行を通常の記号として扱うと想定されていますregexp_substr
。
この動作が正しいことと、期待される結果を得る方法を説明してください。
WITH
params AS (SELECT 'ab' || chr(10) || 'cd' p_value,
'xxx' p_delimeter
FROM dual
)
SELECT regexp_substr(p_value, '(.*?)(' || p_delimeter || '|$)', 1, level, 'c', 1) AS CUT
FROM params
CONNECT BY regexp_substr(p_value, '(.*?)(' || p_delimeter || '|$)', 1, level, 'c', 1) IS NOT NULL;
Actual result: Expected result:
----- ------
CUT CUT
----- ------
cd ab/cd
^
'this is just a marker for a line break [= chr(10)]'