如何用INSTR函数实现SQL字段精确匹配而非部分匹配?
精确匹配的INSTR调整方案
单个字符串完全匹配
如果attr_value和OBJECT_NAME都是独立的单个字符串,要避免部分匹配,需要同时满足匹配起始位置为1和两个字符串长度一致:
IIF( INSTR(UPPER(attr_value), UPPER(OBJECT_NAME)) = 1 AND LENGTH(UPPER(attr_value)) = LENGTH(UPPER(OBJECT_NAME)), 1, 0 )
这样就能确保attr_value和OBJECT_NAME完全相等,不会出现test_INC.MC_INS_SO_STAT匹配到test_INC.MC_INS_SO_STAT_Anom的情况——后者长度更长,会被长度判断过滤掉。
多值拼接字符串中的完整值匹配
如果attr_value是多个值用分隔符(比如逗号、分号)拼接的字符串,要匹配其中完整的单个值,可以给两个字段两端都加上分隔符后再用INSTR判断:
假设使用逗号作为分隔符(请根据实际分隔符调整):
IIF( INSTR( UPPER(',' || attr_value || ','), UPPER(',' || OBJECT_NAME || ',') ) > 0, 1, 0 )
比如attr_value是abc,test_INC.MC_INS_SO_STAT,def,处理后变成,abc,test_INC.MC_INS_SO_STAT,def,,而OBJECT_NAME处理后是,test_INC.MC_INS_SO_STAT,,此时INSTR只会匹配完整的子串,不会误匹配带后缀的test_INC.MC_INS_SO_STAT_Anom。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

