我有一個字串,它在多個地方包含一個單詞SPLIT_HERE。我想通過SPLIT_HERE將此字串拆分為多行。我只能找到一種使用逗號或分號或單個字符分隔符進行拆分的方法,但無法找到一種按單詞進行拆分的方法。有沒有辦法這樣做?
示例字串:
The Oracle/PLSQL REPLACE SPLIT_HERE function replaces a sequence SPLIT_HERE of characters.
期望的輸出:
The Oracle/PLSQL REPLACE
function replaces a sequence
of characters.
SELECT REGEXP_SUBSTR('The Oracle/PLSQL REPLACE SPLIT_HERE function replaces a sequence SPLIT_HERE of characters.', 'SPLIT_HERE', 1, LEVELS.COLUMN_VALUE) A
FROM dual
CROSS JOIN TABLE(CAST(MULTISET(SELECT LEVEL FROM dual CONNECT BY LEVEL <= 2)AS sys.OdciNumberList)) levels
uj5u.com熱心網友回復:
您可以使用 REGEXP_SUBSTR:
SELECT LEVEL AS element
, REGEXP_SUBSTR(te_xt,'(.*?)( SPLIT_HERE |$)', 1, LEVEL, NULL, 1 ) AS el_val
FROM test
CONNECT BY LEVEL <= regexp_count(te_xt, ' SPLIT_HERE ') 1;
這是一個演示
uj5u.com熱心網友回復:
您可以在遞回查詢中使用簡單(快速)字串函式(而不是慢速正則運算式):
WITH bounds (value, spos, epos) AS (
SELECT value,
1,
INSTR(value, 'SPLIT_HERE', 1)
FROM table_name
UNION ALL
SELECT value,
epos 10,
INSTR(value, 'SPLIT_HERE', epos 10)
FROM bounds
WHERE epos > 0
)
SELECT CASE epos
WHEN 0
THEN SUBSTR(value, spos)
ELSE SUBSTR(value, spos, epos - spos)
END AS match
FROM bounds;
對于樣本資料:
CREATE TABLE table_name (value) AS
SELECT 'The Oracle/PLSQL REPLACE SPLIT_HERE function replaces a sequence SPLIT_HERE of characters.' FROM DUAL;
輸出:
匹配 The Oracle/PLSQL REPLACEfunction replaces a sequenceof characters.
db<>在這里擺弄
uj5u.com熱心網友回復:
您可以使用該replace函式,因為您想替換文字字串。不需要regexp_replace。
select replace('The Oracle/PLSQL REPLACE SPLIT_HERE function replaces a sequence SPLIT_HERE of characters.',
'SPLIT_HERE',
chr(10)) as RESULT
from DUAL
結果是:
RESULT
-----------------------------
The Oracle/PLSQL REPLACE
function replaces a sequence
of characters.
請參閱此 SO 問題:插入 VARCHAR2 列時的新行
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448742.html
