首页 > 解决方案 > 想简化oracle sql中的REGEXP_SUBSTR()

问题描述

我有两个 REGEXP_SUBSTR 语句并希望进一步简化它们。

SELECT REGEXP_SUBSTR ('Node-323401:BellUser:Job-221429','[^ :]+',1,2)FROM DUAL;

SELECT REGEXP_SUBSTR ('WebWORKS3:BellUser','[^ :]+',1,2)FROM DUAL;

对于这两者,我得到了预期的输出:BellUser。这是令人满意的。

如果表达式更改为“BellUser:Job-221429”或“Node:323401:BellUser:Job-221429”或“Web:WORKS3:BellUser”或任何东西,我需要一种方法来简化正则表达式以获取 BellUSer别的。

标签: sqlregexoracle

解决方案


如果您只需要解决以下查询的空间问题,则查询将有助于案例陈述,但正如评论中所述,如果“BellUser”的位置不断更改,此查询将不起作用并且没有意义

select CASE WHEN  REGEXP_COUNT('WebWORKS3:Bell User', ' ', 1, 'i')= 0 THEN REGEXP_SUBSTR ('WebWORKS3:Bell User','[^ :]+',1,2) 
       ELSE    REGEXP_SUBSTR ('WebWORKS3:Bell User','[^ :]+',1,2) ||' '|| REGEXP_SUBSTR ('WebWORKS3:Bell User','[^ ]+',1,2) END from dual;

推荐阅读