如何从连接的数据库表中提取列名及其值

分隔在数据库表中串联的列值(column_name1,values1,columnname2,values2,....),解析字符串。

我有一个表,例如“ tab1”,并有一个列名“ rule_sql”。

“ rule_sql”列具有以下值-

COUNTRY_CODE IN ('766') COMPANY_CODE IN ('03') COLLECTION_UNIT_CODE IN ('000099')   
COUNTRY_CODE IN ('624') COMPANY_CODE IN ('02') COLLECTION_UNIT_CODE IN ('BE0001','000COM','000INT','00FSCY')

列甚至具有-

COLLECTION_UNIT_CODE IN ('006800','000205','999999','110009','007279') COUNTRY_CODE IN ('869') COMPANY_CODE IN ('01') 

要提取/解析的列名不是一顺序的。

预期结果是-

COUNTRY_CODE || COMPANY_CODE || COLLECTION_UNTI_CODE

766           || 03          || 000099
624           || 02          || BE0001,000COM,000INT,00FSCY
869           || 01          || 006800,000205,999999,110009,007279
a212346 回答:如何从连接的数据库表中提取列名及其值

您可以使用regex_replace()

select 
    regexp_replace(rule_sql,'^.*COUNTRY_CODE IN \(([^)]+)\).*$','\1') country_code,regexp_replace(rule_sql,'^.*COMPANY_CODE IN \(([^)]+)\).*$','\1') company_code,'^.*COLLECTION_UNIT_CODE IN \(([^)]+)\).*$','\1') collection_unit_code
from mytable

Demo on DB Fiddle

with mytable as (
    select 'COUNTRY_CODE IN (''766'') COMPANY_CODE IN (''03'') COLLECTION_UNIT_CODE IN (''000099'')' rule_sql from dual
    union all select 'COUNTRY_CODE IN (''624'') COMPANY_CODE IN (''02'') COLLECTION_UNIT_CODE IN (''BE0001'',''000COM'',''000INT'',''00FSCY'')' from dual
)
select 
    regexp_replace(rule_sql,'\1') collection_unit_code
from mytable
COUNTRY_CODE | COMPANY_CODE | COLLECTION_UNIT_CODE               
:----------- | :----------- | :----------------------------------
'766'        | '03'         | '000099'                           
'624'        | '02'         | 'BE0001','000COM','000INT','00FSCY'

注意:要删除其余的引号,然后用replace()包装结果:

select 
    replace(regexp_replace(rule_sql,'\1'),'''','') country_code,replace(regexp_replace(rule_sql,'') company_code,'') collection_unit_code
from mytable

Demo

COUNTRY_CODE | COMPANY_CODE | COLLECTION_UNIT_CODE       
:----------- | :----------- | :--------------------------
766          | 03           | 000099                     
624          | 02           | BE0001,000COM,000INT,00FSCY
本文链接:https://www.f2er.com/3137725.html

大家都在问