Hello i have 3 strings that i want to split and they are all separated with delimiter
string_1 contains names of fields for example: ID, DUE_DATE
string_2 contains values of fields for example: 80781,2026-12-01
string_3 contains types of fields for example: VARCHAR2,DATE
string_4 contains format of fields for example: yyyy-mm-dd (for date field)
所以我提出了这个问题
with params as (
select 'ID|DUE_DATE' as v_names
,'80781|2026-12-01' as v_values
,'VARCHAR2|DATE' as v_types
,'|yyyy-mm-dd' as v_types_format
,'|' as v_delimiter
from dual
)
SELECT
REGEXP_SUBSTR(v_names, '[^ '||v_delimiter||']+', 1, level) AS v_name
,REGEXP_SUBSTR(v_values, '[^ '||v_delimiter||']+', 1, level) AS v_value
,REGEXP_SUBSTR(v_types, '[^ '||v_delimiter||']+', 1, level) AS v_type
,REGEXP_SUBSTR(v_types_format, '[^ '||v_delimiter||']+', 1, level) as v_format
FROM params
CONNECT BY REGEXP_SUBSTR(v_names, '[^ '||v_delimiter||']+', 1, level) IS NOT NULL
我想得到这个结果(v_types_format 字符串应该为 ID 带来 null,为 DUE_DATE 带来 yyyy-mm-dd)
但是我得到了这个结果
您没有匹配零宽度术语。
with params as (
select 'ID|DUE_DATE' as v_names
,'80781|2026-12-01' as v_values
,'VARCHAR2|DATE' as v_types
,'|yyyy-mm-dd' as v_types_format
,'|' as v_delimiter
from dual
)
SELECT REGEXP_SUBSTR(v_names, '(.*?)(['||v_delimiter||']|$)', 1, level, NULL, 1)
AS v_name
,REGEXP_SUBSTR(v_values, '(.*?)(['||v_delimiter||']|$)', 1, level, NULL, 1)
AS v_value
,REGEXP_SUBSTR(v_types, '(.*?)(['||v_delimiter||']|$)', 1, level, NULL, 1)
AS v_type
,REGEXP_SUBSTR(v_types_format, '(.*?)(['||v_delimiter||']|$)', 1, level, NULL, 1)
as v_format
FROM params
CONNECT BY LEVEL < REGEXP_COUNT(v_names, '(.*?)(['||v_delimiter||']|$)')
输出:
V_NAME | V_VALUE | V_类型 | V_格式 |
---|---|---|---|
身份证 | 80781 | VARCHAR2 | 空 |
DUE_DATE | 2026-12-01 | 日期 | 年-月-日 |