DB2 like两个表的字段或like一个变量

DB2中的like的使用是有限制的,它后面不能跟一个变量或者是字段,因此,在存储过程或SQL语句中就不能like一个变量或一个字段。

比如有两个表A(a,b,c,d),B(a,b,c,d)。

普遍的用法是:

select * from A where A.b like '%张%'

此语句在任何数据库都是通用的,

但有时也遇到这种情况:

select A.a,B.b from A,B where A.d like B.d||'%'

此语句在oracle中执行没有问题,但在db2中就不行,报以下错误:

 SQL0132N  LIKE 谓词或 POSSTR 标量函数无效,因为第一个操作数不是字符串表达式或第二个操作数不是字符串。LOCATE 或 POSITION 标量函数无效,因为第一个操作数不是字符串,或者第二个操作数不是字符串表达式。

此种情况在db2中是使用locate函数,locate用法:

locate(arg1,arg2,pos),在org2中查找arg1第一次出现的位置,pos指明从哪个位置开始查找(省略则从开始查找),如果arg1不为null且查找不到

的话返回0,如果找到则返回大于0的数字。

对于语句:

select A.a,B.b from A,B where A.d like B.d||'%'

在db2中应该修改为:

select A.a,B.b from A,B where locate(B.d,A.d)>0

原文地址:https://www.cnblogs.com/zmc/p/3216813.html