【发布时间】:2021-03-04 02:54:11
【问题描述】:
我正在尝试捕获以某些模式开头的表名并找到每个组的总计数,但我特别想捕获,下面是一个示例
我认为捕获上述内容的最佳方法是使用 REGEXP ?
查询 1 - 初始
SELECT
owner AS schema_name,
object_name,
object_type,
REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_.*', '\1') as BEGINNING,
count(*),
round(100*ratio_to_report(count(*)) over (), 4) percentage
FROM
dba_objects
GROUP BY
owner,
object_name,
object_type,
REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_.*', '\1')
ORDER BY
percentage desc;
查询 1 - 现有结果
SCHEMA OBJECT_NAME OBJECT_TYPE BEGINNING COUNT(*) PERCENT
STG AB_01_CUST_ENRLMT TABLE AB 1 .00001
STG DKS_SD_PRDCT_DHSS TABLE DKS 1 .00001
STG ABC10_CUST_ENRLMT TABLE ABC10 1 .00001
查询 1 - 预期结果
SNO SCHEMA OBJECT_NAME OBJECT_TYPE BEGINNING COUNT(*) PERCENT
1 STG AB_01_CUST_ENRLMT TABLE AB_01 1 .00001
2 STG DKS_SD_PRDCT_DHSS TABLE DKS_SD 1 .00001
3 STG ABC10_CUST_ENRLMT TABLE ABC10_CUST 1 .00001
4 STG #Tableau_6_sid:15 TABLE #Tableau_6 4000 1.5
5 STG /157d_PoI_12 TABLE /157d_PoI 5000 1.6
6 STG JAVA/157d_Ph TABLE JAVA/157_Ph 5000 1.6
7 STG STU$BA_COENT_123 TABLE STU$BA_COENT 5000 1.5
如何达到预期效果
根据建议我已经合并了以下逻辑并重新运行,不幸的是我没有得到想要的结果
查询 2 - 已修改
SELECT
owner AS schema_name,
object_name,
object_type,
REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_([A-Z0-9$]{1,})_.*', '\1_\2')as BEGINNING,
count(*),
round(100*ratio_to_report(count(*)) over (), 4) percentage
FROM
dba_objects
GROUP BY
owner,
object_name,
object_type,
REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_.([A-Z0-9$]{1,})_.*', '\1_\2')
ORDER BY
percentage desc;
查询 2 - 结果 - 与预期不符
SNO SCHEMA OBJECT_NAME OBJECT_TYPE BEGINNING COUNT(*) PERCENT
1 STG AB_01_CUST_ENRLMT TABLE AB_1 1 .00001
2 STG DKS_SD_PRDCT_DHSS TABLE DKS_D 1 .00001
3 STG ABC_25_ENRLMT TABLE ABC_5 1 .00001
4 STG #Tableau_6_sid:15 TABLE #Tableau_6 4000 1.5
5 STG /157d_PoI_12 TABLE /157d_PoI 5000 1.6
6 STG JAVA/157d_Ph TABLE JAVA/157_Ph 5000 1.6
7 STG STU$BA_COENT_123 TABLE STU$BA_COENT 5000 1.5
我需要在 REGEX 逻辑中更正什么? ,我遇到过一些特殊情况
查询 2 - 结果 - 与预期不符
【问题讨论】:
标签: sql regex oracle regexp-replace regexp-substr