所以我有一個函式,它回傳字串的組合(多個值)。我需要提取字符“DL:”后面的所有內容。但僅此而已。
所以在提取之前:
**pck_import.GETdocnumber(XML_DATA)**
________________________________________
DL:2212200090001 Pr:8222046017
________________________________________
Obj:020220215541 DL:1099089729
________________________________________
DL:DST22017260
________________________________________
DL:22122000123964 Pr:8222062485
________________________________________
DL:22122000108599
________________________________________
Obj:0202200015539 DL:2100001688
在每種情況下,我都需要字符“DL:”之后的“數字”。"DL:" 可以是單獨的,可以在首位(在多個值之間),也可以是最后一個字串。同樣在某些情況下,“DL:”值也包含字符。
所以,輸出:
**OUTPUT**
______________
2212200090001
______________
1099089729
______________
DST22017260
______________
22122000123964
______________
22122000108599
______________
2100001688
我試過了:
substr(pck_import.GETdocnumber(XML_DATA),
instr(pck_import.GETdocnumber(XML_DATA),
'DL:') 3))
這也回傳“Pr:”。
uj5u.com熱心網友回復:
with s as (
select 'DL:2212200090001 Pr:8222046017' str from dual union all
select 'Obj:020220215541 DL:1099089729' str from dual union all
select 'DL:DST22017260' str from dual union all
select 'DL:22122000123964 Pr:8222062485' str from dual union all
select 'DL:22122000108599' str from dual union all
select 'Obj:0202200015539 DL:2100001688' str from dual)
select str, regexp_substr(str, 'DL:(\S )', 1, 1, null, 1) rs
from s;
STR RS
------------------------------- -------------------------------
DL:2212200090001 Pr:8222046017 2212200090001
Obj:020220215541 DL:1099089729 1099089729
DL:DST22017260 DST22017260
DL:22122000123964 Pr:8222062485 22122000123964
DL:22122000108599 22122000108599
Obj:0202200015539 DL:2100001688 2100001688
6 rows selected
uj5u.com熱心網友回復:
像這樣的東西?
樣本資料:
SQL> with test (col) as
2 (select
3 '________________________________________
4 DL:2212200090001 Pr:8222046017
5 ________________________________________
6 Obj:020220215541 DL:1099089729
7 ________________________________________
8 DL:DST22017260
9 ________________________________________
10 DL:22122000123964 Pr:8222062485
11 ________________________________________
12 DL:22122000108599
13 ________________________________________
14 Obj:0202200015539 DL:2100001688'
15 from dual)
16 --
詢問:
17 select replace(regexp_substr(col, 'DL:\w ', 1, level), 'DL:') result
18 from test
19 connect by level <= regexp_count(col, 'DL:');
RESULT
--------------------------------------------------------------------------------
2212200090001
1099089729
DST22017260
22122000123964
22122000108599
2100001688
6 rows selected.
SQL>
(請注意,如果您要處理多行資料,則可能需要修改查詢)
uj5u.com熱心網友回復:
您可以通過使用正則運算式來實作這一點,該運算式利用積極的后向和前瞻。
正則運算式(?<=DL\:)\d*(?=\s)'匹配所有數字,DL:直到出現單個空白字符。
您想為此使用該REGEXP_SUBSTR功能(當您使用 OracleSQL 標記此問題時):
SELECT
REGEXP_SUBSTR(my_column,
'(?<=DL\:)\d*(?=\s)') "DL field"
FROM my_table;
如果您也想匹配子字串DST22017260,使用.(any character) 代替\d會起作用:(?<=DL\:).*(?=\s).
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/522720.html
標籤:sql甲骨文
下一篇:解決查詢結構問題
