我想從 (',7809628#465797,7809628#461396,') 資料中提取 (465797,461396) 格式的資料。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
[DBFiddle][1]
select
ltrim(
regexp_replace(
',7809628#465797,7809628#461396,'
,'[^#]*#(\d ),'
,',\1')
,','
) new_str
from dual;
結果:
NEW_STR
-------------
465797,461396
正則運算式'[^#]*#(\d ),':
[^#]*- 除“#”外的任意數量的任何符號
(\d )- 數字,一個或多個數字,()- 將其標記為一個組,然后用逗號標記。
所以它找到(除 # 之外的任何符號,然后是 #,然后是一個或多個數字,然后是逗號)并將所有找到的子字串替換為逗號并找到“一個或多個數字”(運算式中的唯一組)。然后ltrim洗掉開頭的多余逗號。[1]:https ://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=f66505cd2746a1387e41ec91d6c7df3a
uj5u.com熱心網友回復:
您可以使用簡單的字串函式(可能比使用正則運算式更容易鍵入,但執行速度可能更快):
SELECT SUBSTR(value, hash1 1, comma2 - hash1 - 1)
|| ',' ||
SUBSTR(value, hash2 1, comma3 - hash2 - 1) AS parsed_value
FROM (
SELECT value,
INSTR(value, '#', 1, 1) AS hash1,
INSTR(value, '#', 1, 2) AS hash2,
INSTR(value, ',', 1, 2) AS comma2,
INSTR(value, ',', 1, 3) AS comma3
FROM table_name
)
其中,對于樣本資料:
CREATE TABLE table_name (value) AS
SELECT ',7809628#465797,7809628#461396,' FROM DUAL;
輸出:
PARSED_VALUE 465797,461396
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/432932.html
標籤:甲骨文
上一篇:匿名塊中的Oracle注釋
下一篇:Oracle中所有列的全文搜索
