我需要用各种模式搜索从数据库对象中捕获起始字符。
我尝试过使用REGEX表达式,下面的查询是我正在尝试的,以及预期的数据集。
查询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; 期望数据集
OBJECT_NAME BEGINNING COUNT(*) PERCENT
ABC_CUST_INFO_D ABC 20 .00010
BBC_CUST_ENTRY_F BBC 100 .030
FHS_PRDCT_STST_T A$f 194 .031
GHS_INVTR_CD_DRY A1B 493 .051
#Tableau_6_sid:15251a_4i_2a #Tableau 4000 1.5
/15722c29d_PhotoImageCameraPro /15722c29d 5000 1.6
JAVA/15722c29d_PhotoImageqeeee JAVA 5000 1.6不幸的是,我无法将下面的内容分开
#Tableau_6_sid:15251a_4i_2a -> #Tableau
/15722c29d_PhotoImageCameraPro -> /15722c29d
JAVA/15722c29d_PhotoImageqeeee ->
如何解决?
因此,如何捕获后面的最后一个字符,下面是一个示例
查询2-捕获最后一个字符
select
owner,
object_name,
object_type,
regexp_substr(object_name, '[^_]*$') ENDING,
count(*) COUNT,
round(100*ratio_to_report(count(*)) over (), 4) percentage
from
dba_objects
where object_name like '%/%'
group by
owner,
object_name,
object_type,
regexp_substr(object_name, '[^_]*$')
ORDER BY
percentage desc期望数据集
OBJECT_NAME BEGINNING COUNT(*) PERCENT
ABC_CUST_INFO_D D 20 .00010
BBC_CUST_ENTRY_F F 100 .030
FHS_PRDCT_STST_T T 194 .031
GHS_INVTR_CD_DRY DRY 493 .051
Teradata/jdbc/EXAcore/MPPReader MPPReader 5000 1.6
sqlj/modegen/engine/FuncInit FuncInit 8000 6.0
moon/aio/af/ext/ISCII11$Decoder ISCII11$Decoder 8700 6.1不幸的是,我无法将下面的内容分开
/jdbc/EXAcore/MPPReader-> MPPReader
sqlj/modegen/engine/FuncInit -> FuncInit
月亮/aio/af/ext/ISCII11 11美元解码器-> ISCII11$Decoder
https://stackoverflow.com/questions/64865763
复制相似问题