我已经构建了使用 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 ) 但它也给了我不同的模式,如输出中提到的,这不符合我的预期输出。如果您可以帮助如何调整逻辑以仅获取完全匹配的记录。
目前还不清楚所提供的示例数据的预期输出背后的逻辑是什么。如果您想获取 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 */