具有多个值的DB2 like子句

zzoitvuj  于 2023-01-20  发布在  DB2
关注(0)|答案(1)|浏览(447)

如何在DB2v12.01中使用带有多个值的like子句。
SELECT t1.* FROM表1 t1,(从帮助表中选择(模式列)作为术语)t2 WHERE t1.col1与t2.term相同
Pattern_col包含n个值,如(%abc%、%xyz%、%nnn%、...)
提前感谢您的时间和帮助。
我尝试了How to use LIKE with IN in DB2?中提到的这个解决方案,当我使用sysdummy表时它工作正常(Oracle的等价物是DUAL)
但是当我尝试用实际的表值替换sysdummy 1时,我得到了下面的错误。SQLCODE = -132,错误:Like的操作数无效
我不明白为什么它可以与sysdummy 1一起工作,为什么不能与实际的表一起工作。

fcipmucu

fcipmucu1#

您的方法没有问题(我猜),但您使用的平台/版本可能是个问题。例如,在LUW上的Db2 11.5:

create table patterns (pid int not null primary key, pattern varchar(100) not null);
insert into patterns (pid, pattern) values (1, '%abc% %xyz% %nnn%');

create table t (val varchar(100) not null primary key);
insert into t (val) values ('xyzabc xyz nnn'),('xyzabc xyz nn');

select t.*
from t
join patterns p
    on t.val like p.pattern
where p.pid = 1;

VAL                                                                                                 
----------------------------------------------------------------------------------------------------
xyzabc xyz nnn

可以插入多个阵列,例如:

delete from patterns;
insert into patterns (pid, pattern) 
values (1, '%abc%'), (2, '%xyz%'), (3, '%nnn%');

select t.*
from t
join patterns p
    on t.val like p.pattern
where p.pid = 1;

VAL                                                                                                 
----------------------------------------------------------------------------------------------------
xyzabc xyz nn                                                                                       
xyzabc xyz nnn

从你的评论来看,你似乎在使用zos。LUW和ZOS都有regexp能力,你可能想探索一下:
REGEXP_LIKE

相关问题