指导功能辅助

问题描述 投票:0回答:1

我已经构建了使用 2 个字段并使用 instr 来获取数据的逻辑,我需要在下面搜索精确的模式匹配。但是我也得到了不同的模式匹配输出。任何人都可以帮忙解决这个问题吗?我也想只使用 instr 而不是任何常规匹配函数,如 regex_inst:

**Input** : attr_value and object_name are the field names.
属性值 对象名称
选择“执行 test_INC.MC_INS_SO_STAT;”来自默认数据库 test_INC.MC_INS_SO_STAT
选择“执行test_INC.MC_INS_SO_STAT_Anom” test_INC.MC_INS_SO_STAT
选择“执行 test_INC.MC_INS_SO_ST;”
**Output** :
属性值
选择“执行 test_INC.MC_INS_SO_STAT;”来自默认数据库
选择“执行test_INC.MC_INS_SO_STAT_Anom”
**Expected Output**:
属性值
选择“执行 test_INC.MC_INS_SO_STAT;”来自默认数据库

我尝试过这个逻辑: IIF (INSTR (upper(attr_value),upper(OBJECT_NAME)) > 0 ,1, 0 ) 但它也给了我不同的模式,如输出中提到的,这不符合我的预期输出。如果您可以帮助如何调整逻辑以仅获取完全匹配的记录。

oracle oracle11g oracle-sqldeveloper
1个回答
0
投票

目前还不清楚所提供的示例数据的预期输出背后的逻辑是什么。如果您想获取 ATTR_VALUE 包含 OBJECT_NAME 的行,后跟分号和单引号,然后再添加一些文本,则可以按如下方式完成:

WITH    --  S a m p l e    D a t a :
    tbl (ATTR_VALUE, OBJECT_NAME) AS
        ( Select 'select ''exec test_INC.MC_INS_SO_STAT;'' FROM DEFAULTDB', 'test_INC.MC_INS_SO_STAT' From Dual Union All 
          Select 'select ''exec test_INC.MC_INS_SO_STAT_Anom''', 'test_INC.MC_INS_SO_STAT' From Dual Union All 
          Select 'select ''exec test_INC.MC_INS_SO_ST;''', Null  From Dual
        )
--    M a i n    S Q L :
Select ATTR_VALUE
From   tbl
Where  InStr(ATTR_VALUE, OBJECT_NAME || ';''') > 0 And 
       Length( ATTR_VALUE) > 
       Length(SubStr( ATTR_VALUE, 1, InStr(ATTR_VALUE, OBJECT_NAME || ';''') -1) || OBJECT_NAME || ';''')
/*       R e s u l t :
ATTR_VALUE
--------------------------------------------------------
select 'exec test_INC.MC_INS_SO_STAT;' FROM DEFAULTDB       */
© www.soinside.com 2019 - 2024. All rights reserved.