六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 93|回复: 0

DB2中使用locate

[复制链接]

升级  14.67%

16

主题

16

主题

16

主题

秀才

Rank: 2

积分
72
 楼主| 发表于 2013-1-25 21:26:49 | 显示全部楼层 |阅读模式
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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表