Sql 捕获具有许多模式的起始字符
我需要通过各种模式搜索从数据库对象中捕获起始字符 我已经尝试使用正则表达式,下面是我正在尝试的查询和预期的数据集 查询1Sql 捕获具有许多模式的起始字符,sql,oracle,regex-group,regexp-replace,Sql,Oracle,Regex Group,Regexp Replace,我需要通过各种模式搜索从数据库对象中捕获起始字符 我已经尝试使用正则表达式,下面是我正在尝试的查询和预期的数据集 查询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(
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;
预期数据集
不幸的是,我无法将下面的内容分开
#Tableau_6_sid:15251a_4i_2a-->#Tableau
/15722c29d_PhotoImageCameraPro-->/15722c29d
JAVA/15722c29d_PhotoImageQeee-->JAVA
如何解决
因此,如何捕获x之后的最后一个字符,下面是一个示例
查询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
预期数据集
不幸的是,我无法将下面的内容分开
Teradata/jdbc/EXAcore/MPPReader-->MPPReader
sqlj/modegen/engine/FuncInit-->FuncInit
moon/aio/af/ext/ISCII11$Decoder-->ISCII11$Decoder对于正则表达式,您可以在字符类中添加匹配的
/
和
,然后使用另一个字符类匹配尽可能少的字符,直到下一个/
或
如果模式不区分大小写,还可以添加a-z
^([A-Za-z0-9$/#]+?)[/_].*
如果/
和#
只能在开头,您还可以选择匹配其中一个:
^([/#]?[A-Za-z0-9$]+)[/_].*
查看另一个有关正则表达式,可以在字符类中添加匹配的
/
和
,然后使用另一个字符类匹配尽可能少的字符,直到下一个/
或
如果模式不区分大小写,还可以添加a-z
^([A-Za-z0-9$/#]+?)[/_].*
如果/
和#
只能在开头,您还可以选择匹配其中一个:
^([/#]?[A-Za-z0-9$]+)[/_].*
请参阅另一篇请澄清,您所说的“起始字符”是什么意思?您应该用通俗的语言描述这些标准,以便将它们形式化为某些正则表达式。我的意思是,在这里应该“开始”什么,例如:
qwe\u asd
,\u qwe/\u asd
,\u qwe\u asd
。因为我看到你想跳过第一个反斜杠。也许使用通用子字符串更好<代码>substr(object_name,1,regexp_instr(object_name,[[uu/#]],2)-1),它不起作用吗?我也不能从FHS_PRDCT_stt
和GHS_INVTR_CD_DRY
分别获得计算A$F
和A1B
的算法。请澄清,“起始字符”是什么意思?您应该用通俗的语言描述这些标准,以便将它们形式化为某些正则表达式。我的意思是,在这里应该“开始”什么,例如:qwe\u asd
,\u qwe/\u asd
,\u qwe\u asd
。因为我看到你想跳过第一个反斜杠。也许使用通用子字符串更好substr(object_name,1,regexp_instr(object_name,[[uu/#]],2)-1)
,它不起作用吗?而且我无法从FHS_PRDCT_stt
和GHS_INVTR_CD_DRY
分别获得计算A$F
和A1B
的算法。非常感谢,到现在看起来还不错,让我做测试,如果有任何问题会回来,我有类似的情况,但在2ns的情况下,我试图捕捉最后的字符,你能检查吗?@rakesh这应该是一个不同的模式?(A-A-Za-Za-z0-z0-z0-10-9.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1-9美元#]+)在查询2中-regexp_substr(对象名称,“^[A-Za-z0-9$/#]+/([A-Za-z0-9$#]+])作为结尾,我没有得到预期的结果。谢谢,现在看起来还不错,让我做测试,如果有任何问题会回来,我有类似的情况,但在2ns的情况下,我试图捕捉最后的字符,你能检查吗?@rakesh这应该是一个不同的模式?(A-A-Za-Za-z0-z0-z0-10-9.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1-9美元#]+)在查询2中-regexp_substr(对象名称,“^[A-Za-z0-9$/#]+/([A-Za-z0-9$#]+])作为结尾,我没有得到预期的结果